批次檔不循環處理清單中的非文件項

批次檔不循環處理清單中的非文件項

在使用 Windows 10 的提升命令中,我執行此批次檔:

@echo off
cls
for /f "tokens=1-6 delims=," %%G in ("3D Objects,Documents,Downloads,Music,Pictures,Videos") do (
echo %%G
)

我希望它能列出這六個項目中的每一個。相反,它僅列出第一個(3D 物件),然後停止。使用“Tokens”似乎沒有太大區別,“delims”似乎也沒有像我想的那樣發揮作用。

問題:我是否錯誤地認為FOR可以處理清單中以逗號分隔的項目?

答案1

我認為它不能像您期望的那樣對非文件列表起作用,因為如 中所示for /?。 。 。

  • 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]
    

我相信這意味著FOR /F句柄command, string, 或file-set我認為file-set具體意味著一個實際文件。如果是這種情況,則意味著將非文件列表放入其中,它被解釋為delimstokens無法解析或迭代的字串。


若要解決將非文件清單放入常規為了不使用任何tokensor進行循環delims,並確保包含空格的值用雙引號引起來。

@echo off
cls
for %%G in ("3D Objects",Documents,Downloads,Music,Pictures,Videos) do (
echo %%~G
)

您可以在所有值兩邊加上雙引號,並~在變數佔位符中使用 [ ] 波形符從輸出值解析出雙引號,從而給出不帶雙引號的所需輸出。

@echo off
cls
for %%G in ("3D Objects","Documents","Downloads","Music","Pictures","Videos") do (
echo %%~G
)

輸出

3D Objects
Documents
Downloads
Music
Pictures
Videos

支持資源

相關內容