0

我正在尝试编写一个脚本来删除 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命令有问题并且无法找到它刚刚删除的目录......

这是我应该担心的事情吗,因为脚本似乎做了我想做的事?更好的是,有没有办法显示没有找到哪个文件,这样我就可以自己弄清楚发生了什么?

谢谢你的帮助!

(供参考,这里是批处理文件运行前后的文件夹结构,假设所有文件都超过 30 天:)

前:

-TestTemp
    -More Test
        testfile1.txt
        testfile2.txt
        testfile3.txt
    testfile1.txt
    testfile2.txt
    testfile3.txt

后:

-TestTemp
4

3 回答 3

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"
于 2013-06-12T22:36:26.920 回答
2

如果文件夹不为空,则它将返回无害的错误消息。将2>nul删除错误消息。

forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE 2>nul"
于 2013-06-13T06:53:36.103 回答
0

我也收到了这个“系统找不到指定的文件”错误,但是当我从 ForFiles 调用中删除“/s”时它就消失了。我实际上并不需要 /s,但看起来这里的海报确实需要。如果您需要递归删除并且无法忍受错误(或者不想用 2>nul 吞下它),也许您可​​以在递归文件中嵌套一个非递归 ForFiles?只是一个想法。

于 2018-12-18T18:10:35.110 回答