1

Windows Hotfixリストを何らかの形式でフェッチしたいのですが、その出力は区切り文字で区切ることができます。これまでのところ、目的の出力を提供するwmicコマンドを見つけましたが、問題は、\s区切り文字がここで機能しないことです。後でJavaプログラムで使用して個々の列を取得できる文字を配置する方法はあり,ますか?

指示

wmic qfe get caption,csname,description,hotfixid,installedby,installedon

出力

Caption                                        CSName    Description      HotFixID   InstalledBy          InstalledOn
http://go.microsoft.com/fwlink/?LinkId=161784  Abhishek  Update           KB971033   NT AUTHORITY\SYSTEM  3/15/2012
http://support.microsoft.com/?kbid=2032276     Abhishek  Security Update  KB2032276  NT AUTHORITY\SYSTEM  3/15/2012
..
.

アップデート

やっています

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11" %g in ('wmic qfe get caption,csname,description,fixcomments,hotfixid,installdate,installedby,installedon,name,servicepackineffect,status') do @echo %g,%h,%i,%j,%k,%l,%m,%n,%o,%p

しかし、それは私に無効なGET式を与えます

C:\Users\Abhishek\Desktop>for /f "tokens=1,2,3,4,5,6,7,8,9,10,11" %g in ('wmic qfe get caption,csname,description,fixcomments,hotfixid,installdate,installedby,installedon,name,servicepackineffect,status') do @echo %g,%h,%i,%j,%k,%l,%m,%n,%o,%p
Invalid GET Expression.

ここでの問題は何ですか?これは私にとって問題を解決するかもしれません。

その他の更新

以下のコマンドも試しましたが、これでもスペースの問題は解決しません

指示

for /f "tokens=1,2,3,4,5,6,7,8,9,10,11" %g in ('wmic qfe list') do @echo %g,%h,%i,%j,%k,%l,%m,%n,%o,%p

出力

Caption,CSName,Description,FixComments,HotFixID,InstallDate,InstalledBy,InstalledOn,Name,ServicePackInEffect
http://go.microsoft.com/fwlink/?LinkId=161784,Abhishek,Update,KB971033,NT,AUTHOR,,Y\SYSTEM,3/15/2012,
http://support.microsoft.com/?kbid=2281679,Abhishek,Security,Update,KB2281679,NT,AUTHORITY\SYSTEM,3/15/2012,
http://support.microsoft.com/?kbid=2284742,Abhishek,Update,KB2284742,NT,AUTHORIT,,SYSTEM,3/15/2012,
http://support.microsoft.com/?kbid=2286198,Abhishek,Security,Update,KB2286198,NT,AUTHORITY\SYSTEM,3/15/2012,
4

2 に答える 2

5

wmicの結果からわかるように、列は少なくとも2つのスペースで区切られています。

Caption                                        CSName    Description      HotFixID   InstalledBy          InstalledOn
http://go.microsoft.com/fwlink/?LinkId=161784  Abhishek  Update           KB971033   NT AUTHORITY\SYSTEM  3/15/2012
http://support.microsoft.com/?kbid=2032276     Abhishek  Security Update  KB2032276  NT AUTHORITY\SYSTEM  3/15/2012

\s{2,}したがって、これは正規表現で分割することにより、Javaで簡単に解析できます。

String result = "...";
for (String line : result.split("\n")) {
     System.out.println("-> " + line);
     for (String column : line.split("\\s{2,}")) {
         System.out.println("  => [" + column.trim() + "]");
     }
 }

出力:

-> Caption                                        CSName    Description      HotFixID   InstalledBy          InstalledOn
  => [Caption]
  => [CSName]
  => [Description]
  => [HotFixID]
  => [InstalledBy]
  => [InstalledOn]
-> http://go.microsoft.com/fwlink/?LinkId=161784  Abhishek  Update           KB971033   NT AUTHORITY\SYSTEM  3/15/2012
  => [http://go.microsoft.com/fwlink/?LinkId=161784]
  => [Abhishek]
  => [Update]
  => [KB971033]
  => [NT AUTHORITY\SYSTEM]
  => [3/15/2012]
-> http://support.microsoft.com/?kbid=2032276     Abhishek  Security Update  KB2032276  NT AUTHORITY\SYSTEM  3/15/2012
  => [http://support.microsoft.com/?kbid=2032276]
  => [Abhishek]
  => [Security Update]
  => [KB2032276]
  => [NT AUTHORITY\SYSTEM]
  => [3/15/2012]

バッチ側については、私はそれについて本当に何も知らないのであなたを助けることはできません:-)

編集: どうやら、Javaでも簡単に解析できるCSVを生成する/format:csvためのスイッチがあります。wmic自分のマシンで動作させることはできませんが、注目に値します。

于 2012-08-30T08:07:19.577 に答える
0

私は最近、この種のことのために何かをし、それを以下の構文で動作させることができました。以下のコードスニペット。

FOR /F "tokens=1,2,3,4,5,6,7,8 delims=," %%a IN ('WMIC /NODE:"%PCNAME%" PRODUCT GET 
IDENTIFYINGNUMBER^,INSTALLSOURCE^,NAME^,PACKAGECACHE^,PACKAGENAME^,VENDOR^,VERSION 
/FORMAT:CSV') DO (
 SET ELE1=%%a
 SET ELE2=%%b
 SET ELE3=%%c
 SET ELE4=%%d
 SET ELE5=%%e
 SET ELE6=%%f
 SET ELE7=%%g
 SET ELE8=%%h
 CALL :CheckIt
)
于 2020-06-19T14:53:37.473 に答える