在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仅显示指定文件夹中的文件,而不显示其任何子文件夹。
答案 0 :(得分:0)
我有一个临时的解决方案,您可以尝试。这有点hacky,但可能可以满足您的尝试。
将Timer(time, function, iterable, kwargs)
添加到您的命令中,除非它们的名称中通常没有这个名称/M "\*.\*"
,否则它将跳过目录。我没有看到它递归子目录,但是无法用该命令掩盖目录。我尝试使用
.
这将获得所有非目录的列表,但是我无法将鲁鲁特管道传递给forfiles命令以使其使用它作为输入来进行日期屏蔽。感到抱歉 部分解决方案。
答案 1 :(得分:0)
让我们考虑一下您要系统执行的操作:
Forfiles /p "C:\temp" /d -30
上面的命令几乎可以完成您的预期工作,可以找到30天以上的任何文件/文件夹。
/c "cmd /c dir @path"
这与您的想法不符。您实际上是在要求cmd
对dir
进行的每个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