1

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

2

Причина, по которой вы видите пустые строки при использовании | more того, хотя CSV-кодировка соответствует стандарту ANSI, она имеет дополнительные возвраты каретки, как показано ниже:

1

Если вы опустите | more вы в конечном итоге с Unicode CSV. К сожалению, в Excel, похоже, есть проблемы с такими CSV, поскольку при их открытии значения не разделяются на столбцы. Для этого есть два решения:

  1. Если вас не волнует потеря символов Unicode (т.е. не ANSI), сохраните CSV с кодировкой ANSI, прежде чем открывать его в Excel.

  2. Если вам не безразлична кодировка Unicode, используйте мастер импорта текста Excel (Data tab > From Text) с запятой, заданной в качестве разделителя:

    2


Редактировать: Вот прямой способ получить CSV в кодировке ANSI:

  1. Скопируйте Windows\System32\wbem\en-US\csv.xsl (замените en-US вашим языковым кодом) в любой каталог по вашему выбору.

  2. Откройте файл в любом текстовом редакторе, таком как Блокнот, затем измените атрибут кодирования метода вывода 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"/>
    
  3. Запустите 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,&#29992;&#20110; Visual Studio 2013 &#30340; Microsoft &#25253;&#21578;&#26597;&#30475;&#22120;&#21152;&#36733;&#39033;,11.1.3442.2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .