通过批处理脚本从列表中远程获取序列号和型号。

问题描述 投票:0回答:1

我试图创建一个简单的脚本,从pclist.txt中使用计算机名称,获取序列号和型号,并导出到csv文件。我只是不明白为什么它不能在csv文件中打印序列号和型号。这是我的简单脚本。

@echo off
for /f %%i in (pclist.txt) do (
     for /f "tokens=2 delims==" %%M in ('wmic /node:%%i csproduct get name /value') do set "Model=%%M"
     for /f "tokens=2 delims==" %%I in ('wmic /node:%%i bios get serialnumber /value') do set "SN=%%I"
     echo %%i, %SN%, %Model% >> list.csv
     )
pause
list batch-file remote-access wmic serial-number
1个回答
0
投票

我可能误解了你的意图,但我希望以下是实现你的预期任务的一般方法。

@%__AppDir__%wbem\WMIC.exe /Node:@pclist.txt /FailFast:1000 /Output:list.csv CSProduct Get Name /Format:CSV
@%__AppDir__%wbem\WMIC.exe /Node:@pclist.txt /FailFast:1000 /Append:list.csv BIOS Get SerialNumber /Format:CSV
@Pause

如果你想尝试只输出每个项目以及用逗号隔开的节点名称,那么也许这样就足够了。

@Echo Off
SetLocal EnableExtensions
(
    For /F UseBackQDelims^=^ EOL^= %%G In (
        "pclist.txt"
    ) Do (
        For /F Tokens^=6Delims^=^" %%H In (
            '%__AppDir__%wbem\WMIC.exe /Node:%%G /FailFast:1000 CSProduct Get Name /Format:MOF'
        ) Do (
            For /F Tokens^=6Delims^=^" %%I In (
                '%__AppDir__%wbem\WMIC.exe /Node:%%G /FailFast:1000 BIOS Get SerialNumber /Format:MOF'
            ) Do Echo %%G,%%H,%%I
        )
    )
)>"list.csv"
Pause

0
投票

你的代码会运行得很好--当 wmic 也就不会有那句 "丑话说在前头 "的结尾。CRCRLF. 第一个 CR 成为您的变量的一部分。CR 意思是 "将光标设置回行首",所以后面的所有回声(在同一行)都会覆盖之前的内容。

你可以用另一个 for 循环,将剩余的 CR. 而且你不需要变量 SNModel;当你嵌套了 for 循环,你可以使用 for 变量直接代替。

@echo off
del list.csv 2>nul
for /f %%i in (pclist.txt) do (
  for /f "tokens=2 delims==" %%M in ('wmic /node:"%%i" csproduct get name /value') do for %%m in (%%M) do (
    for /f "tokens=2 delims==" %%S in ('wmic /node:"%%i" bios get serialnumber /value') do for %%s in (%%S) do (
      >>list.csv echo %%i, %%s, %%m
    )
  )
)
type list.csv
pause

(Compo的代码是有效的, 因为所需的字符串是从行的中间切出来的, 所以行尾并不重要)

© www.soinside.com 2019 - 2024. All rights reserved.