如果包含某個檔案,則擁有一個使用 7-Zip 來“查看”zip 檔案的批處理檔案。
"C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd"
但是將它放入 for 回圈會產生錯誤:'找不到“C:\ Program”'。撰寫 %ProgramFiles% 也沒有什么區別。
for /F "delims=" %%a in ('"C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd"') do ...
但是,如果我省略圍繞 zip 檔案和搜索的檔案的引號,它會起作用。
for /F "delims=" %%a in ('"C:\Program Files\7-Zip\7z.exe" l FolderName\archive.zip file.cmd') do ...
最后我找到了一個解決方案,將命令放入變數中并將其放入 for 回圈中。
set command="C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd"
for /F "delims=" %%a in ('"%command%"') do ...
該變數仍然需要引號。我想了解它是如何作業的。如何將多個帶引號的字串放在帶引號的變數中,但不能將它們直接傳遞給 for 回圈。
這似乎與需要用 ^ 轉義的 &、>、|、... 等運算子類似的問題。我也嘗試過,但沒有成功。我一直在問:“更多?” 因此不再找到右括號。
uj5u.com熱心網友回復:
好吧,您實際上沒有仔細觀察就回答了自己的問題。讓我告訴你為什么:
set command="C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd"
for /F "delims=" %%a in ('"%command%"') do ...
請注意,您的代碼將set命令的值轉換為:
"C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd"
然后,您再次將其傳遞給雙引號中的回圈,如下所示:
"%command%"
最終是:
""C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd""
這將完全在 for 回圈中作業:
for /f "delims=" %%i in ('""C:\Program Files\7-Zip\7z.exe" l "FolderName\archive.zip" "file.cmd""') do ...
盡管在這種情況下這將按預期作業,但如果參考的字串包含特殊字符&,如本例所示,它將失敗:
for /f "delims=" %%i in ('""C:\Program Files\7-Zip\7z.exe" l "FolderName\archives & backups.zip" "file.cmd""') do ...
所以你需要簡單地轉義外部雙引號來克服這個問題:
for /f "delims=" %%i in ('^""C:\Program Files\7-Zip\7z.exe" l "FolderName\archives & backups.zip" "file.cmd"^"') do ...
Point 2. fromcmd /?似乎說明了這種行為,如下圖所示:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/473714.html
