gpt4 book ai didi

java - 如何在 wmic 输出中使用分隔符来分隔列?

转载 作者:可可西里 更新时间:2023-11-01 11:20:40 28 4
gpt4 key购买 nike

我想获取某种格式的 Windows 修补程序列表,其输出可以用一些分隔符分隔。到目前为止,我找到了一个 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,

最佳答案

正如我在 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]

对于批处理方面,我无法帮助您,因为我对此一无所知:-)

编辑:显然,wmic 有一个开关 /format:csv,它应该生成一个 CSV,您也可以在 Java 中轻松解析它。我无法让它在我的机器上运行,但值得关注。

关于java - 如何在 wmic 输出中使用分隔符来分隔列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12191721/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com