簡體   English   中英

雙引號和 for /f 的問題

[英]Troubles with double quotes and for /f

我正在研究一個批處理腳本,並試圖讓它在包含空格的目錄中工作。 在特定行中,我執行以下循環:

 for /f "tokens=*" %%A in ('%~dp0fciv\fciv.exe -md5 %~dp1%FN%') do...

如果當前目錄包含空格,則循環將無法調用可執行文件。 現在我把它用雙引號來修復它:

 for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 %~dp1%FN%') do...

這工作正常,直到參數沒有空格。 因此我也需要把它放在雙引號中:

 for /f "tokens=*" %%A in ('"%~dp0fciv\fciv.exe" -md5 "%~dp1%FN%"') do...

但這並沒有按預期工作。 我直接在 cmd 中進行了額外的測試:

 for /F "tokens=* usebackq" %A in (`"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"`) do echo %A for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 "d:\Somefile"') do echo %A

錯誤是: "c:\Test" not recognized as an internal or external command, operable program or batch file.

我還嘗試再次省略第二個雙引號:

 for /F "tokens=*" %A in ('"c:\Test Folder\fciv\fciv.exe" -md5 d:\Somefile') do echo %A

該命令令人驚訝地完成了它應該做的事情。

為什么會發生錯誤以及如何實現所需的功能?

用引號將整個命令括在反引號內。

 C:\Users\User>for /F "usebackq tokens=*" %A in (`""C:\Users\Use r\Desktop\Editor\UEd\UEd.exe" -md5 "d:\Somefile""`) do echo %A

如果沒有參數,刪除最后一個反引號可能會起作用。

我最近遇到了這個問題,接受的答案對我不起作用。 我最終將命令及其功能包裝到另一個 CMD 文件中,然后從FOR /F調用它。 下面是一個命令示例:

 wmic fsdir where name="C:\\some\\path\\to\\a\\folder" get creationdate

路徑被提取並作為變量傳遞,output 被捕獲並在調用腳本的FOR /FDO部分中設置。

希望這對將來的人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM