Windows批处理中,若是for循环处理带空格文件路径,就会报打不到文件错误。例如在批处理中读取一个文件的内容并将文件每行内容打印出来,脚本以下: shell
test.bat spa
@echo off set TEST_FILE=%~dp0/test_file.txt for /f %%i in (%TEST_FILE%) do echo %%i;test_file.txt内容随意,将test.bat和test_file.txt放到"C:\test dir"目录下,这时运行脚本就会报以下错误:
这时,咱们首先想到的就是用引号把文件路径%TEST_FILE%包上,将test.bat修改以下: code
test.bat 文档
@echo off set TEST_FILE=%~dp0/test_file.txt for /f %%i in ("%TEST_FILE%") do echo %%i;再次运行,会看到以下结果:
虽然没有报错,但这显示不是咱们想要的结果,for循环把"C:\test dir\test_file"当成了字符串而不是文件。因此,这样也不能解决问题,还须要再进行修改。 字符串
test.bat for循环
@echo off set TEST_FILE=%~dp0/test_file.txt for /f "usebackq" %%i in ("%TEST_FILE%") do echo %%i;再次运行,终于获得了正确结果:
查看for的帮助文档,能够看到"usebackq"的做用: class