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\""
来自批处理文件的简化工作脚本部分
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\""