0

私は現在、systeminfoからの出力とipconfigの両方をマージするバッチファイルを作成しています。

@ECHO OFF
pause
systeminfo > "%computername% SystemInfo.txt"
ipconfig >> "%computername% SystemInfo.txt"
"%computername% systeminfo.txt"

私の知る限り、コードはOSのバージョンやOSの言語に関係なく、正常に実行されます。私の問題は、systeminfoダンプにあります。実行されているマシンにこれまでにインストールされた100以上の修正プログラムがすべて一覧表示され、txtファイルがほとんど判読できなくなります。

<useful info>
[01]: File 1
[02]: File 1
[03]: File 1
[04]: File 1
....
[150]: file 1
etc...
<useful info>

別の問題もあります。つまり、このバッチファイルは、オランダ語ウィンドウまたは英語ウィンドウのいずれかを実行するコンピューターで実行する必要があります。つまり、これらの修正プログラムと単語はコンピューターごとに異なるため、単語をフィルター処理できません。誰もがこの問題に良い解決策を持っています。

注:findstrを使用して関連情報のみを残し、逆の方法で解決されることを確認しました。しかし、それは言語に依存するため、実行可能なオプションではありません。

編集:修正プログラムの名前はOSによっても異なります。つまり、修正プログラムをフィルタリングすることはできません。例:テストしたXP SP3では、リストのほとんどがビスタで「[##] file1」と呼ばれる修正プログラムで侵害されますが、リストには16進値が表示されます。

4

2 に答える 2

3

編集

私の元の答えは機能しませんでしたが、各 systeminfo ヘッダーの数と順序が一貫している限り機能する別のアイデアがあります。Hotfix(s): が常に 31 番目のヘッダーであるという事実に依存しています。

@echo off
setlocal enableDelayedExpansion
>systemInfo.txt (
  set cnt=0
  for /f "delims=" %%A in ('systeminfo') do (
    set "ln=%%A"
    if "!ln:~0,1!"==" " (if !cnt! neq 31 echo !ln!) else (
      echo !ln!
      set /a cnt+=1
    )
  )
  ipconfig
)

ヘッダーの数や順序が変更される可能性がある場合、サポートする必要があるすべての言語を考慮して、特定のヘッダー テキストを探す以外に解決策があるかどうかはわかりません。

元の失敗した回答

これがどれほど信頼できるかはわかりません。私のマシンではうまくいきますが、一部のマシンで削除すべきではないものを削除しても驚かないでしょう。

>systemInfo.txt (
  systeminfo|findstr /vxrc:"                           \[[0-9]*\]: [^ ]*"
  ipconfig
)

すべてのホットフィックスは KB で始まり、その後に数字の文字列が続きます。これが常に当てはまる場合、上記は次のように改善できます。

>systemInfo.txt (
  systeminfo|findstr /vxrc:"                           \[[0-9]*\]: KB[0-9]*"
  ipconfig
)
于 2013-02-05T16:45:14.467 に答える
0

私はそれを理解したくありませんが、systeminfo からの csv 出力に基づいてフォーマットできます。

systeminfo /fo csv > info.csv

出力は、どの言語でも基本的に次のようになります。

(headers)"<col>", "<col>", "<col>" <...> "<col>"<newline>
(data)"<col>", "<col>", "<col>" <...> "<col>"

修正プログラムの列は、最後から 2 番目の列です。そのため、引用符で区切ってそのフィールドを無視できます。がらくたがたくさん含まれていますが、それでもそのままな"hotfix, hotfix, hotfix,"ので、引用符ですべてを削除できます。

あなたが私に尋ねると、バッチでの文字列操作はひどいです。これが私だったら、文字列ライブラリを持つ言語でそれを行い、代わりにそれを呼び出します。

于 2013-02-05T17:11:50.853 に答える