在你说它之前已经被问到了,是的,我知道。我过去一小时一直在研究这个问题,但仍然无法弄清楚它为什么不起作用。我已直接复制并粘贴了答案中的代码,如下所示:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set vidx=0
pause
FOR /F "tokens=*" %%A IN (file.txt) do (
SET /A vidx=!vidx! + 1
set var!vidx!=%%A
pause
)
set var
pause
现在,这完全正常,如果" file.txt"没有空格。但是,如果文件名包含空格,则整个过程都是徒劳的。我把名字放在引号中,但是所有程序都将var1设置为="文件用spaces.txt"没有别的。实际上,无论空格如何,在任何地方加上引号都会使一切都搞砸。我确定这是一个非常简单的答案,我似乎无法找到它。
非常感谢任何帮助!
答案 0 :(得分:2)
尝试使用useback
(您也可以使用usebackq
)选项,这样您就可以使用双引号和空格指向文件路径:
@echo off
setlocal ENABLEDELAYEDEXPANSION
set vidx=0
pause
FOR /F "useback tokens=*" %%A IN ("file.txt") do (
SET /A vidx=!vidx! + 1
set var!vidx!=%%A
pause
)
set var
pause
事实上,M $没有很好的记录(对于命令帮助消息摘录):
FOR / F ["选项"]%变量IN(文件设定)DO命令[命令参数]
FOR / F ["选项"]%变量IN("字符串")DO命令[command-parameters]
FOR / F ["选项"]%变量IN('命令')DO命令[命令参数]
或者,如果出现usebackq选项:
FOR / F ["选项"]%变量IN(文件设定)DO命令[命令参数]
FOR / F ["选项"]%变量IN('字符串')DO命令[command-parameters]
FOR / F [" options"]%变量IN(
command
)DO命令[command-parameters]