Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用批处理或PowerShell脚本循环浏览CSV文件?_Powershell_Batch File_Cmd - Fatal编程技术网

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

如何使用批处理或PowerShell脚本循环浏览CSV文件?,powershell,batch-file,cmd,Powershell,Batch File,Cmd,我有一个CSV文件,有两个不同的列,一个是电脑名,另一个是MAC地址,如下所示: PCxxxx 00-11-22-33-44-55 ... ... 这些值应放在以下CLI命令中: wdsutil /Set-Device /Device:PCxxxx /ID:00-11-22-33-44-55 现在,因为大约有200个,我想自动化这个 作为一个有趣的问题,我们可以用批处理来实现这一点吗?这会很复杂,对吧?我想到了数组,但不认为一个人可以批量完成 也许使用PowerShell会更容易一些 # F

我有一个CSV文件,有两个不同的列,一个是电脑名,另一个是MAC地址,如下所示:

PCxxxx 00-11-22-33-44-55
...
...
这些值应放在以下CLI命令中:

wdsutil /Set-Device /Device:PCxxxx /ID:00-11-22-33-44-55
现在,因为大约有200个,我想自动化这个

作为一个有趣的问题,我们可以用批处理来实现这一点吗?这会很复杂,对吧?我想到了数组,但不认为一个人可以批量完成

也许使用PowerShell会更容易一些

# 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 } 
警告:未测试。

在批处理文件中:

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

这会有帮助吗?文件似乎没有标题,所以您需要手动提供它们。默认的分隔符也不起作用。。。delims=“选项是不必要的,因为空格是默认的分隔符。您可以在…“tokens=1,2”%%a中使用
是的,我只是选择在这里显式。此外,默认的分隔符是空格和制表符。