0

我目前正在制作一个批处理文件,该文件将 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 的相关信息。但是,因为这取决于语言,所以这不是一个可行的选择。

编辑:修补程序在不同操作系统上的命名也不同,这意味着我无法过滤这些。示例:在我测试的 XP SP3 上,列表中的大部分内容都会受到 vista 上称为“[##]file1”的修补程序的影响,但是,您会在列表中看到十六进制值。

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>"

修补程序列是倒数第二列。因此您可以用引号将其拆分,并忽略该字段。它里面会有一堆废话,但它仍然会是"hotfix, hotfix, hotfix,"这样,你可以删除引号中的整个内容。

如果你问我,批量字符串操作很糟糕。如果这是我,我会用带有字符串库的语言来代替它。

于 2013-02-05T17:11:50.853 回答