システムにインストールされている各プログラムの名前とバージョンを.csvファイルに出力しようとしています。 VBScriptを使用してもっと複雑なことを行うこともできますが、システムバックアップを実行する直前に実行されるバッチファイルとして含めるために、これを非常に単純に保ちたいと思います。いくつかの調査の後、私は以下を思いついた:
wmic product get name,version /format:csv |more >Installed_Apps.csv
結果のファイルをメモ帳で開くと、ファイルの上部に空白行とノード列が追加されていることがわかります。どちらも望まれていませんが、私はこれらの奇妙なことの両方で生きることができます。ただし、気になるのは、ファイルを2回クリックして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で開いたときにファイルに余分な空白行がないようにこれを解決する方法について何か考えはありますか?
ありがとう!
| more
を使用すると空白行が表示される理由は、CSVのエンコーディングはANSIで問題ありませんが、以下に示すように、余分なキャリッジリターンがあるためです。
| more
を省略すると、UnicodeCSVになります。残念ながら、ExcelではこのようなCSVに問題があるようです。それを開くと、値が列に分割されません。これには2つの解決策があります。
Unicode(つまり非ANSI)文字を失うことを気にしない場合は、Excelで開く前にANSIエンコーディングでCSVを保存してください。
Unicodeエンコーディングが気になる場合は、ExcelのテキストインポートWizard(Data tab > From Text
)を使用し、カンマを区切り文字として指定します。
編集:ANSIでエンコードされたCSVを作成する直接的な方法は次のとおりです。
Windows\System32\wbem\en-US\csv.xsl
(en-USを言語コードに置き換えます)を任意のディレクトリにコピーします。
メモ帳などのテキストエディタでファイルを開き、 XML(XSLT)出力メソッド のencoding属性を次のように変更します。 Windows-1252fromutf-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