For 循环中的 Forfiles 命令

Forfiles command in For Loop

来自批处理文件的简化工作脚本部分

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 命令才能使这项工作正常进行。

我刚试过,效果很好:

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"

正如已经回答的那样,要获得仅包含双引号的每个路径的输出,您不需要 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\""