Csv 批处理语言中的For循环

Csv 批处理语言中的For循环,csv,batch-file,Csv,Batch File,我有一个CSV文件,看起来像这样: ComputerName,UserID,192.168.0.xx ComputerName,UserID,192.168.0.xx 我正在尝试编写一个批处理循环脚本,该脚本将读取脚本中的IP并ping它们这是我迄今为止所做的: setlocal Disable DelayedExpansion for /f "tokens=1,2,3 delims=" %%a in (test.csv) do( Set line=%%c ping %line% )

我有一个CSV文件,看起来像这样:

ComputerName,UserID,192.168.0.xx
ComputerName,UserID,192.168.0.xx
我正在尝试编写一个批处理循环脚本,该脚本将读取脚本中的IP并ping它们这是我迄今为止所做的:

setlocal Disable DelayedExpansion

for /f "tokens=1,2,3 delims=" %%a in (test.csv) do(

Set line=%%c
ping %line%

)
设置变量是可行的,但似乎无法从批处理文件中读取任何内容,因为返回的错误显示:

%%a was unexpected at this time 
我想知道如何才能修复这个问题,或者我在这里做错了什么

delims=位意味着没有分隔符,因此整个字符串被视为一个完整的行,而不是像您希望的那样在逗号上拆分。换成

setlocal EnableDelayedExpansion

for /f "tokens=1,2,3 delims=," %%a in (test.csv) do (
    Set line=%%c
    ping !line!
)

有一些问题,但你非常接近。我已经更新了你的脚本并记下了更正

REM You want to _Enable_ delayed expansion. This is a single word.
setlocal EnableDelayedExpansion

REM Your delimiter needs to be a ,
for /f "tokens=1,2,3 delims=," %%a in (test.csv) do (
    Set line=%%c
    REM You need to access the line value enclosed in !'s since it is delayed expansion.
    ping !line!
)
或者,您可以在命令提示符下以一行程序的形式执行此操作,无需批处理文件:

FOR /F "tokens=1,2,3 delims=," %a in (test.csv) do PING %c