即使我不使用/ S参数,为什么仍要递归Forfiles?

时间:2019-05-16 20:33:35

标签: windows batch-file forfiles

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

2 个答案:

答案 0 :(得分:0)

我有一个临时的解决方案,您可以尝试。这有点hacky,但可能可以满足您的尝试。

Timer(time, function, iterable, kwargs) 添加到您的命令中,除非它们的名称中通常没有这个名称/M "\*.\*",否则它将跳过目录。我没有看到它递归子目录,但是无法用该命令掩盖目录。我尝试使用

.

这将获得所有非目录的列表,但是我无法将鲁鲁特管道传递给forfiles命令以使其使用它作为输入来进行日期屏蔽。感到抱歉 部分解决方案。

答案 1 :(得分:0)

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

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

上面的命令几乎可以完成您的预期工作,可以找到30天以上的任何文件/文件夹。

/c "cmd /c dir @path"

这与您的想法不符。您实际上是在要求cmddir进行的每个forfiles匹配,并为每个@path(包括文件夹)提供完整目录。假设您的目录超过30天:

C:\Temp\oldInstalldir\

您正在告诉cmd.exe做:

dir "C:\Temp\oldinstalldir"

以及c:\temp中每个文件的目录。因此,您真正想要的是列出forfiles已为您找到的超过30天的文件,因此可行的解决方案是仅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