batch file中的逗号分隔双引号stringFOR / F不起作用

我有麻烦分裂一行,其中包含用逗号分隔的双引号string。 string看起来像这样:

"DevLoc","/Root/Docs/srvr/temp test","171.118.108.22","/Results/data/Procesos Batch","C:\DataExport\ExportTool\Winsock Folder DB","C:\Export\ExportTool\Temp Folder","22" 

一些string值包含空格。 我想将每个双引号string存储到一个variables。 任何人都可以请帮忙

以下是我的批处理脚本。 variables“EnvDetails”包含需要parsing的上面的行。

 FOR /F "tokens=1,2,3,4,5,6,7 delims=," %%i in ("%EnvDetails%") do ( SET TEMPS=%%i SET Path=%%j SET host=%%k SET scriptPath=%%l SET WINSP_HOME=%%m SET PUTTY_HOME=%%n SET portNum=%%o @echo %TEMPS% > temp.txt @echo %MPath% >> temp.txt @echo %host% >> temp.txt @echo %scriptPath% >> temp.txt @echo %WINSCP_HOME% >> temp.txt @echo %PUTTY_HOME% >> temp.txt @echo %portNum% >> temp.txt ) 

部分问题是,您正试图在设置的相同括号代码块中检索变量值。 由于cmd解释器在执行命令之前用它们的值替换变量,所以基本上将空值传递给temp.txt。 要等到变量已经被定义之后再扩展它们,你需要延迟扩展。

但是,你真的让这个比需要更复杂。 除了将这些变量回显到文本文件外,还有什么其他的变量呢?

你应该做的是使用一个基本for循环,而不是for /ffor没有任何开关,无论如何评估类似于CSV解析器的行,以逗号,分号,未加引号的空格和制表符分隔等等。

鉴于你基本上是用逗号分隔一行,然后按顺序将每个标记回显到一个文本文件,每行一个标记,你可以简化你的代码,就像这样:

 @echo off >temp.txt ( for %%I in (%EnvDetails%) do echo %%~I ) 

如果我错了,你确实打算对数据进行进一步的处理; 如果你确实需要这些变量,那么这个例子展示了延迟扩展:

 @echo off setlocal set EnvDetails="DevLoc","/Root/Docs/srvr/temp test","171.118.108.22","/Results/data/Procesos Batch","C:\DataExport\ExportTool\Winsock Folder DB","C:\Export\ExportTool\Temp Folder","22" >temp.txt ( FOR /F "tokens=1-7 delims=," %%i in ("%EnvDetails%") do ( SET "TEMPS=%%~i" SET "MPath=%%~j" SET "host=%%~k" SET "scriptPath=%%~l" SET "WINSCP_HOME=%%~m" SET "PUTTY_HOME=%%~n" SET "portNum=%%~o" setlocal enabledelayedexpansion echo !TEMPS! echo !MPath! echo !host! echo !scriptPath! echo !WINSCP_HOME! echo !PUTTY_HOME! echo !portNum! endlocal ) ) 

最后的注意: %%~i%%~j等的代字符表示从每个记号中除去引号。 如果您故意希望将引号保留为变量值的一部分,请删除波浪线。