【问题标题】:Batch file to delete files and folders in user directories批处理文件删除用户目录中的文件和文件夹
【发布时间】:2015-10-02 18:47:52
【问题描述】:

我正在尝试删除用户目录中的一些文件和文件夹。这是它的样子。我在 C:\Users\ 中有一些用户帐户,例如“Bob”和“Joe”。在每个目录中,我想删除一些文件夹和文件。所以架构看起来像这样,我的脚本现在在下面:

我正在尝试删除 \Temp\ 中的文件并尝试删除整个目录。有任何想法吗?如果添加了另一个用户名,我也试图让脚本工作。谢谢

【问题讨论】:

  • 我在这里没有看到问题,所以我认为“它不起作用”。它应该做什么,它实际上在做什么?没有文件被删除?文件夹没有被删除吗?您是否不小心完全格式化了您的硬盘?
  • 另外,请记住,在脚本内部,for 循环变量需要两个% 符号,所以%m 应该是%%m
  • @SomethingDark,对不起,这是正确的。这无法正常工作。感谢您的信息,我将添加额外的 %
  • 我最初的问题仍然存在 - 您的代码的哪个特定部分没有按应有的方式工作?
  • 好吧,添加额外的 % 会有所帮助。现在看起来del /Q /F 的行正在删除我想要的那个文件夹中的文件。但我也删除驻留在 \Temp\ 中的任何文件夹。不知道什么命令会这样做

标签: batch-file batch-processing


【解决方案1】:

试试这个 FOR /D %%p IN ("%file path goes here%.") DO rmdir "%%p" /s /q

要删除文件夹更改 %file path go here% 到该文件夹​​的文件路径并删除 % 符号

【讨论】:

    【解决方案2】:

    让我们稍微扩展一下。

    for /r "d:\Program Files\Logs\Logs" %%a in (*.zip) do (
        for %%b in ("%%~dpa\.") do (
          if /i "%%~nxb" == "Special" (
             forfiles /p "%%~dpa." /m "%%~nxa" /d -60 /c "cmd /c del @path && echo @path was deleted"
             ) else (
             forfiles /p "%%~dpa." /m "%%~nxa" /d -30  /c "cmd /c del @path && echo @path was deleted"
            )
         )
     )
    

    您可以扩展它以包含您的临时文件夹:

    for /r "c:\users" %%a in (*.*) do (
        for %%b in ("%%~dpa\.") do (
          if /i "%%~dpa" == "temp" (
             forfiles /p "%%~dpa." /m "%%~nxa" /c "cmd /c rd /q/s @path"
             ) else (
             forfiles /p "%%~dpa." /m "%%~nxa" /c "cmd /c del @path"
            )
         )
     )
    

    注意:RD /q /s 如果你使用 for /?您将获得 %~dpa 等的变量替换。

    希望这会有所帮助!

    【讨论】: