我目前正在制作一个批处理文件,它将systeminfo的输出和ipconfig:
合并@ECHO OFF
pause
systeminfo > "%computername% SystemInfo.txt"
ipconfig >> "%computername% SystemInfo.txt"
"%computername% systeminfo.txt"
代码运行良好,很好,据我所知,也独立于操作系统版本和操作系统语言。但我的问题在于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上,大多数列表都会受到vista上名为“[##] file1”的修补程序的影响,但是,您会在列表中看到十六进制值。
答案 0 :(得分: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
)
答案 1 :(得分:0)
我不想弄清楚,但你可以根据systeminfo的csv输出格式化它。
systeminfo /fo csv > info.csv
任何语言的输出基本上都是:
(headers)"<col>", "<col>", "<col>" <...> "<col>"<newline>
(data)"<col>", "<col>", "<col>" <...> "<col>"
修补程序列是倒数第二列。所以你可以用引号拆分它,并忽略那个字段。它会有一堆废话,但它仍然是"hotfix, hotfix, hotfix,"
所以你可以用引号删除整个东西。
如果你问我,批处理字符串操作很糟糕。如果这是我,我会用一个带字符串库的语言来做,然后调用它。