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