删除文件夹时出现forfiles错误

时间:2013-06-12 21:24:11

标签: windows batch-file cmd directory rmdir

我正在尝试编写一个脚本来删除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

3 个答案:

答案 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嵌套在递归中?只是一个想法。