如何使用批处理或PowerShell脚本循环遍历CSV文件?

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会稍微容易一些。


这个会有帮助吗 - http://social.technet.microsoft.com/Forums/en-US/winserverpowershell/thread/813f3903-83c3-4a6a-9edf-320a341ed99d/ - Angshuman Agarwal
2个回答

12
在批处理文件中:
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导入命令,但根据您的问题,您似乎没有列标题,因此需要手动提供它们:

Import-CSV -Delim ' ' -Path foo.csv -Header Name,Mac | ForEach-Object {
    wdsutil /Set-Device "/Device:$($_.Name)" "/ID:$($_.Mac)"
}

FOR命令中的... delims= "选项是不必要的,因为空格是默认分隔符。您可以只使用for /f "tokens=1,2" %%a in ... - Aacini
是的,我只是选择在这里明确一些。此外,默认分隔符为空格和制表符。 - Joey

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 } 

警告:未经测试。


2
该文件似乎没有标题,因此您需要手动提供它们。此外,默认分隔符将无法使用。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接