0

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

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 命令才能完成这项工作 - 如果可能的话。

4

2 回答 2

1

我刚试过这个,它工作正常:

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"
于 2022-01-05T17:31:38.920 回答
0

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

或者……</p>

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\""
于 2022-01-05T19:03:33.873 回答