【问题标题】:forfiles error while deleting folders删除文件夹时forfiles错误
【发布时间】:2013-06-12 21:24:10
【问题描述】:

我正在尝试编写一个脚本来删除 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 目录中的所有文件,然后检查所有子目录。然后我检查剩余的文件,如果它是 empty 目录,请将其删除。

此脚本运行良好 - 我要删除的所有文件都被删除,而那些应该保留的文件仍然存在。但是,我注意到,当我运行这个批处理文件时,我收到了错误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

【问题讨论】:

    标签: windows batch-file cmd directory rmdir


    【解决方案1】:

    您可以显示文件和文件夹:

    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"
    

    【讨论】:

    • 我接受这个答案,因为它帮助我弄清楚如何显示“未找到”哪个文件。但是,我仍然不明白为什么我会收到此错误。
    【解决方案2】:

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

    forfiles /p %TESTTEMP% /s /c "cmd /c IF @ISDIR==TRUE rmdir @FILE 2>nul"
    

    【讨论】:

    • 如果文件夹不为空,它会返回“文件夹不为空”...这是它应该的。毕竟,如果文件夹不为空,则意味着其中的文件不到 30 天,因此该文件夹(和文件)应该保留。不过,这不是我得到的错误。不过,感谢 2>nul 提示!从来不知道那个。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多