为什么即使我没有使用 /S 参数,Forfiles 也会递归?
Why is Forfiles recursing even though I'm not using the /S parameter?
在 Windows Server 2008 R2 Standard 上的 Windows 批处理文件中,我尝试使用 Forfiles 命令而不递归我的文件,但它仍然递归,即使我没有使用/S 参数。
如何让它停止递归
我已经尝试过使用@path 和@file,甚至使用/s。当我使用 /S 时,递归的数量是荒谬的!
ForFiles /p "C:\temp" /d -30 /c "cmd /c dir @path" >temp.txt
在上面的代码中,我希望 temp.txt 只显示指定文件夹中的文件,而不是任何子文件夹中的文件。
我有一个临时解决方案,您可以试试。这有点 hacky,但它可能适用于您正在尝试做的事情。
将 /M "\*.\*"
添加到您的命令中,它将跳过目录,除非它们的名称中通常没有 .
。我没有看到它递归子目录,但无法使用该命令屏蔽目录。我使用
尝试了几次
dir /b /a-d
这会获取所有非目录的列表,但我无法将结果通过管道传输到 forfiles 命令以使其用作输入来进行日期屏蔽。感到抱歉
部分解决方案。
让我们考虑一下您要求系统执行的操作:
Forfiles /p "C:\temp" /d -30
上面的命令几乎符合您的预期,找到任何 file/folder 超过 30 天的。
/c "cmd /c dir @path"
这不是你想的那样。您实际上是在要求 cmd
到 dir
forfiles
找到的每个匹配项,并执行每个 @path
的完整目录,包括文件夹。假设您有一个超过 30 天的目录:
C:\Temp\oldInstalldir\
你告诉 cmd.exe
做:
dir "C:\Temp\oldinstalldir"
以及 c:\temp
中每个文件的目录。所以你真正想要的是列出你找到的超过 30 天的文件,这些文件 forfiles
已经为你找到了,所以一个可行的解决方案是 echo
它们。
ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @path">temp.txt
或仅按文件名(无路径):
ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @file">temp.txt
在 Windows Server 2008 R2 Standard 上的 Windows 批处理文件中,我尝试使用 Forfiles 命令而不递归我的文件,但它仍然递归,即使我没有使用/S 参数。
如何让它停止递归
我已经尝试过使用@path 和@file,甚至使用/s。当我使用 /S 时,递归的数量是荒谬的!
ForFiles /p "C:\temp" /d -30 /c "cmd /c dir @path" >temp.txt
在上面的代码中,我希望 temp.txt 只显示指定文件夹中的文件,而不是任何子文件夹中的文件。
我有一个临时解决方案,您可以试试。这有点 hacky,但它可能适用于您正在尝试做的事情。
将 /M "\*.\*"
添加到您的命令中,它将跳过目录,除非它们的名称中通常没有 .
。我没有看到它递归子目录,但无法使用该命令屏蔽目录。我使用
dir /b /a-d
这会获取所有非目录的列表,但我无法将结果通过管道传输到 forfiles 命令以使其用作输入来进行日期屏蔽。感到抱歉 部分解决方案。
让我们考虑一下您要求系统执行的操作:
Forfiles /p "C:\temp" /d -30
上面的命令几乎符合您的预期,找到任何 file/folder 超过 30 天的。
/c "cmd /c dir @path"
这不是你想的那样。您实际上是在要求 cmd
到 dir
forfiles
找到的每个匹配项,并执行每个 @path
的完整目录,包括文件夹。假设您有一个超过 30 天的目录:
C:\Temp\oldInstalldir\
你告诉 cmd.exe
做:
dir "C:\Temp\oldinstalldir"
以及 c:\temp
中每个文件的目录。所以你真正想要的是列出你找到的超过 30 天的文件,这些文件 forfiles
已经为你找到了,所以一个可行的解决方案是 echo
它们。
ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @path">temp.txt
或仅按文件名(无路径):
ForFiles /p "C:\temp" /d -30 /c "cmd /c echo @file">temp.txt