0

在 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 只显示指定文件夹中的文件,而不是它的任何子文件夹。

4

2 回答 2

0

我有一个临时解决方案,你可以试试。这有点骇人听闻,但它可能适用于您正在尝试做的事情。

添加/M "\*.\*"到您的命令中,它将跳过目录,除非它们.的名称通常没有。我没有看到它递归子目录,但没有办法用该命令屏蔽目录。我尝试了一些尝试

dir /b /a-d

这将获取所有非目录的列表,但我无法将 rusults 传递到 forfiles 命令中以使其将其用作执行日期屏蔽的输入。抱歉部分解决方案。

于 2019-05-16T21:56:09.483 回答
0

让我们考虑一下您要求系统执行的操作:

Forfiles /p "C:\temp" /d -30

上面的命令几乎符合您的预期,查找任何超过 30 天的文件/文件夹。

/c "cmd /c dir @path"

这不符合你的想法。您实际上是在询问cmd找到dir的每个匹配项forfiles并执行 each 的完整目录@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
于 2019-05-17T09:16:59.117 回答