WMIC |more имеет дополнительные строки при открытии.csv в Excel
Я пытаюсь вывести имя и версию каждой программы, установленной в моей системе, в файл.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
Excel:
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