7

我有一个包含两列不同列的 CSV 文件,一列带有 PC 名称,另一列带有 MAC 地址,如下所示:

PCxxxx 00-11-22-33-44-55
...
...

这些值应放入以下 ​​CLI 命令中:

wdsutil /Set-Device /Device:PCxxxx /ID:00-11-22-33-44-55

现在因为大约有 200 个,我想自动化这个。

作为一个有趣的问题,可以用批处理来做到这一点吗?这会很复杂,对吧?我想到了数组,但不认为可以批量执行此操作。

也许使用 PowerShell 会更容易一些。

4

2 回答 2

11

在批处理文件中:

for /f "tokens=1,2 delims= " %%a in (foo.csv) do (
    wdsutil /Set-Device /Device:%%a /ID:%%b
)

cmd实际上,您可以直接从单行中执行此操作:

for /f "tokens=1,2 delims= " %a in (foo.csv) do wdsutil /Set-Device /Device:%a /ID:%b

在 PowerShell 中,您可以使用类似的想法:

Get-Content foo.csv | ForEach-Object {
  $name,$mac = -split $_
  wdsutil /Set-Device /Device:$name /ID:$mac
}

或使用 CSV 导入 cmdlet,但鉴于您的问题,您似乎没有列标题,因此您需要手动提供它们:

Import-CSV -Delim ' ' -Path foo.csv -Header Name,Mac | ForEach-Object {
    wdsutil /Set-Device "/Device:$($_.Name)" "/ID:$($_.Mac)"
}
于 2012-04-26T08:53:30.993 回答
3
# First column in csv file must be titled PCName, second column must be titled MacAddress.
Import-Csv myfile.csv | %{ wdsutil /Set-Device /Device:$_.PCName /ID:$_.MacAddress } 

警告:未经测试。

于 2012-04-26T08:47:13.290 回答