批處理檔案中的簡化作業腳本部分
for %%F in
(
C:\A\*.TXT
) do (
echo %%F
)
這會列印出檔案夾 A 中的所有 .TXT 檔案路徑。
我想添加一個 forfiles 擴展名,以便只獲取 .TXT 檔案 /D -2
for %%F in ('
forfiles /P "C:\A\" /M *.TXT /D -2 /C "cmd /c echo @PATH"
') do
(
echo %%F
)
但這只會將 forfiles 命令列印為字串:
'forfiles
/P
"C:\A\"
/M
/D
-2
/C
"cmd /c echo @PATH"'
我如何必須交出 forfiles 命令才能完成這項作業 - 如果可能的話。
uj5u.com熱心網友回復:
我剛試過這個,它作業正常:
forfiles /M *.TXT /D -2 /C "cmd /c echo @file"
如您所見,您不需要添加forfiles到您的 for 回圈中,因為它取代了 for 回圈。
如果您希望子目錄中的所有檔案都使用此選項,則可以添加/S開關:
forfiles /S /M *.TXT /D -2 /C "cmd /c echo @path"
...如果你想指定一個目錄,你可以這樣做:
forfiles /P C:\ /S /M *.TXT /D -2 /C "cmd /c echo @path"
uj5u.com熱心網友回復:
正如已經回答的那樣,要獲得僅包含雙引號的每個路徑的輸出,您不需要for回圈。
%SystemRoot%\System32\forfiles.exe /P "C:\A" /M "*.txt" /D -2 /C "%SystemRoot%\System32\cmd.exe /D /C \"If @IsDir == FALSE Echo @Path\""
但是,從技術上講,要獲得與您相同的輸出:
for %%F in
(
C:\A\*.TXT
) do (
echo %%F
)
即沒有雙引號,你仍然需要一個for回圈:
For /F "Delims=" %%G In ('%SystemRoot%\System32\forfiles.exe /P "C:\A" /M "*.txt" /D -2 /C "%SystemRoot%\System32\cmd.exe /D /C \"If @IsDir == FALSE Echo @Path\""') Do Echo %%~G
或者…
與Echo Off:
%SystemRoot%\System32\forfiles.exe /P "C:\A" /M "*.txt" /D -2 /C "%SystemRoot%\System32\cmd.exe /Q /D /C \"If @IsDir == FALSE For %%G In (@Path) Do Echo %%~G\"" & Echo(
與Echo On:
%SystemRoot%\System32\forfiles.exe /P "C:\A" /M "*.txt" /D -2 /C "%SystemRoot%\System32\cmd.exe /D /C \"@If @IsDir == FALSE For %%G In (@Path) Do Echo %%~G\""
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/404999.html
標籤:
