从文本文件

时间:2016-09-09 07:51:04

标签: batch-file

在你说它之前已经被问到了,是的,我知道。我过去一小时一直在研究这个问题,但仍然无法弄清楚它为什么不起作用。我已直接复制并粘贴了答案中的代码,如下所示:

@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"没有别的。实际上,无论空格如何,在任何地方加上引号都会使一切都搞砸。我确定这是一个非常简单的答案,我似乎无法找到它。

非常感谢任何帮助!

1 个答案:

答案 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]