在你说已经有人问过之前,我知道。过去一个小时我一直在研究这个,但仍然不明白为什么它不起作用。我直接复制并粘贴了这个完全相同问题的答案中的代码,如下所示:
@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 设置为 =“带有空格的文件.txt”,仅此而已。事实上,无论空格如何,在任何地方放置引号都会搞砸一切。我确信这是一个非常简单的答案,我只是似乎找不到它。
非常感谢任何帮助!
最佳答案
尝试使用 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 ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
or, if usebackq option present:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (
command
) DO command [command-parameters]
关于batch-file - 为变量赋予文本文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39406489/