我正在尝试将系统上安装的每个程序的名称和版本输出到 .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)字符,请在使用 Excel 打开 CSV 之前先使用 ANSI 编码保存它。
如果您确实关心 Unicode 编码,请使用 Excel 的文本导入向导 (
Data tab > From Text
) 并以逗号指定为分隔符:
编辑:以下是获得 ANSI 编码 CSV 的直接方法:
复制
Windows\System32\wbem\en-US\csv.xsl
(替换英文将您喜欢的语言复制到任何目录(包括您的语言代码)。在任何文本编辑器(如记事本)中打开该文件,然后更改编码的属性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