![WMIC 批处理文件循环遍历 CSV 并获取驱动器状态](https://linux22.com/image/1573857/WMIC%20%E6%89%B9%E5%A4%84%E7%90%86%E6%96%87%E4%BB%B6%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%20CSV%20%E5%B9%B6%E8%8E%B7%E5%8F%96%E9%A9%B1%E5%8A%A8%E5%99%A8%E7%8A%B6%E6%80%81.png)
我正在使用此代码检查我公司远程电脑的驱动器健康状态
for /f "tokens=1 delims= " %%a in (C:\temp\HOSTNAMES.csv) do (
WMIC /Node:%%a DiskDrive GET Caption, Status
)
这很有效,但我需要捕获网络上每台 PC HOSTNAME 的状态,即(OK)或(Pred Fail),并构建一个简单的 .CSV 报告,因为有超过 2000 台 PC 需要检查
所以报告看起来是这样的
PC HOSTNAME - STATUS
HOSTNAME01A - OK
HOSTNAME02B - Pred Fail
HOSTNAME03C - Pred Fail
HOSTNAME04D - OK
我真的很努力地将驱动器状态分配给变量,以便我可以构建报告。
答案1
"tokens=1 delims= "
是默认的,不需要表达。- 当使用 wmic 时,
/Format:csv
该节点将成为输出的一部分
:: Q:\Test\2018\10\30\SU_1371253.cmd
@Echo off
SetLocal EnableExtensions EnableDelayedExpansion
( for /f %%H in (HOSTNAMES.csv) do (
Echo:Processing %%H>CON:
for /f "delims=" %%A in ('
WMIC /node:%%H DiskDrive GET Caption^,Status /Format:csv ^|findstr /i "%%H"
') do @Echo %%A
)
) > "%~dpn0.Log"
答案2
根据 LotPings 的指示,输出格式包括节点名称。如果我们将其与从文件读取主机列表的csv
能力结合起来,我们可以使用wmic
wmic /node:@"c:\temp\hostnames.csv" DiskDrive get Caption,Status /format:csv > report.csv
或者
wmic /node:@"c:\temp\hostnames.csv" /output:"report.csv" DiskDrive get Caption,Status /format:csv
通过这种方式,我们只启动一个wmic
进程,而不是每个节点启动一个进程。