Я пытаюсь вывести имя и версию каждой программы, установленной в моей системе, в файл .csv. Я мог бы сделать что-то более сложное с помощью VBScript, но предпочел бы сохранить это очень простым, включив в пакетный файл, который будет запущен непосредственно перед выполнением резервного копирования системы. После некоторых исследований я пришел к следующему:
wmic product get name,version /format:csv |more >Installed_Apps.csv
Когда я открываю полученный файл в Блокноте, я вижу, что он добавляет пустую строку в начало файла и столбец узлов. Хотя ни то, ни другое нежелательно, я могу жить с обеими этими странностями. Однако меня беспокоит то, что если я дважды щелкну по файлу и открою его в Excel, между каждой строкой результатов будет пустая строка, которую я не вижу, когда открываю файл в Блокноте.
Примеры:
Блокнот:
ComputerName,Software1,1.0
ComputerName,Software2,2.1
ComputerName,Software3,2.5
Эксель:
ComputerName,Software1,1.0
ComputerName,Software2,2.1
ComputerName,Software3,2.5
Я предполагаю, что это потому, что вывод WMIC изначально был в Unicode, но я думал, что обхожу это правильно, добавляя |more
к команде. Насколько я могу судить, файл в формате ASCII, но я не проверял все символы.
Есть ли у вас мысли о том, что может быть причиной этого и как решить эту проблему, чтобы в файле не было лишних пустых строк при открытии в Excel?
Спасибо!
решение1
Причина, по которой вы видите пустые строки при использовании, | more
заключается в том, что, хотя кодировка CSV и соответствует ANSI, в ней есть дополнительные символы возврата каретки, как вы можете видеть ниже:
Если вы опустите, то | more
получите Unicode CSV. К сожалению, у Excel, похоже, есть проблемы с такими CSV, поскольку при их открытии значения не разделяются на столбцы. Для этого есть два решения:
Если вас не волнует потеря символов Unicode (т. е. не ANSI), сохраните CSV-файл в кодировке ANSI, прежде чем открывать его в Excel.
Если вас интересует кодировка Unicode, используйте мастер импорта текста Excel (
Data tab > From Text
), указав запятую в качестве разделителя:
Редактировать:Вот прямой способ получить CSV-файл в кодировке ANSI:
Копировать
Windows\System32\wbem\en-US\csv.xsl
(заменить)en-USс кодом вашего языка) в любой каталог по вашему выбору.Откройте файл в любом текстовом редакторе, например в Блокноте, затем изменитекодированиеатрибутМетод вывода XML (XSLT)кWindows-1252отutf-16, т.е. отсюда:
<?xml version="1.0"?> <!-- Copyright (c) Microsoft Corporation. All rights reserved. --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output encoding="utf-16" omit-xml-declaration="yes"/>
к этому:
<?xml version="1.0"?> <!-- Copyright (c) Microsoft Corporation. All rights reserved. --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output encoding="Windows-1252" omit-xml-declaration="yes"/>
Бегать
wmic product get name,version /format:csv.xsl > ProductList.csv
Примечание:Символы, не входящие в ANSI, будут кодироваться следующим образом:
UTF-16:
ComputerName,用于 Visual Studio 2013 的 Microsoft 报告查看器加载项,11.1.3442.2
Windows-1252 (ANSI):
ComputerName,用于 Visual Studio 2013 的 Microsoft 报告查看器加载项,11.1.3442.2