我正在尝试编写一个脚本来删除Windows 7中TEMP文件夹中的项目。我只希望它删除30天或更早的文件。我正在一个文件夹中进行测试,我在系统的环境变量中设置了TESTTEMP。
我的脚本如下:
forfiles /p %TESTTEMP% /s /d -30 /c "cmd /c IF @ISDIR==FALSE del @FILE /q"
forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE"
我的逻辑是,如果文件超过30天,进程应首先删除TESTTEMP目录中的所有文件,并检入所有子目录。然后我检查剩余的文件,如果它是空目录,则将其删除。
此脚本运行正常 - 我要删除的所有文件都将被删除,而那些应该保留的文件仍然存在。但是,我注意到当我运行这个批处理文件时,我收到错误The system cannot find the file specified.
我认为它在rmdir
命令中遇到了一些问题而无法找到它刚删除的目录... < / p>
这是我应该担心的事情,因为脚本看起来像我想做的那样吗? 更好的是,有没有办法显示哪个文件没有找到,所以我可以试着弄清楚自己发生了什么?
感谢您的帮助!
(作为参考,这里是批处理文件运行前后的文件夹结构,假设所有文件都超过30天:)
在:
-TestTemp
-More Test
testfile1.txt
testfile2.txt
testfile3.txt
testfile1.txt
testfile2.txt
testfile3.txt
后:
-TestTemp
答案 0 :(得分:3)
您可以显示文件和文件夹:
forfiles /p "%TESTTEMP%" /s /c "cmd /c IF @ISDIR==TRUE echo rmdir @FILE"
forfiles /p "%TESTTEMP%" /s /d -30 /c "cmd /c IF @ISDIR==FALSE echo del @FILE /q"
答案 1 :(得分:2)
如果文件夹不为空,则会返回无害的错误消息。 2>nul
将删除错误消息。
forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE 2>nul"
答案 2 :(得分:0)
我也收到此“系统找不到指定的文件”错误,但是当我从ForFiles调用中删除“ / s”时,它消失了。我实际上并不需要/ s,但看起来就像这里的海报一样。如果您需要递归删除并且无法忍受错误(或者不想用2> nul吞下它),也许您可以将非递归ForFiles嵌套在递归中?只是一个想法。