【问题标题】:How to delete files recursively如何递归删除文件
【发布时间】:2011-01-21 06:55:19
【问题描述】:

我有目录结构 /foo/bar/fooBar/.. 。我想写一个 Windows 命令,我可以在其中提到 foo 目录的路径,它会递归地删除 /foo 中的所有文件和目录,但它不应该删除 foo 目录。

我一直在使用rmdir /q /s [path to foo],但是这个命令也会删除 foo 目录。让我知道是否有任何命令可以完成此操作。

【问题讨论】:

标签: windows cmd


【解决方案1】:
rd /s /q /path/to/foo
md /path/to/foo

【讨论】:

  • 我有一堆嵌套的文件夹和文件,其中一些是只读的。这删除了所有这些,除了只读的,这是我所期望的。这比 Windows Server 2003 的功能要好,后者会在遇到只读文件时停止进程。谢谢!
【解决方案2】:
del /f /s /q DirectoryWhichContainsFilesToDelete/\*

这将删除文件夹DirectoryWhichContainsFilesToDelete 中的所有文件,而不删除文件夹本身。 玩得开心:)

【讨论】:

  • 不删除 DirectoryWhichContainsFilesToDelete 中的 目录
【解决方案3】:

我也在这个问题上摸不着头脑。创建一个使用 rmdir 的 for 循环很容易,但是它会留下长名称中有空格的文件夹。可以操作 dir 列表并获取 8.3 文件名,但是这里有一个更简单的解决方案。

然后创建一个空文件夹;

robocopy \empty_folder \folder_with_sub_folders /PURGE

所有子文件夹和文件都将被删除。

【讨论】:

    【解决方案4】:
    del X /f /s /q 
    rd X /s /q 
    

    这将删除 ROOt 目录。再次使用

     md X
    

    或先复制一份。

    否则你将不得不做批量时髦

     dir X /ad /b
    

    会给你一个 X 的直接子目录的列表。你可以计算出其余的

    【讨论】:

      【解决方案5】:

      我正在寻找一个简单的命令来递归删除目录中的所有文件,但保持目录结构不变。所以,也许这会很有趣;)

      for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i"
      

      命令 'dir /B /S /A:-D' 仅以递归方式 (/S) 列出当前目录中的文件 (/A:-D),而没有 'dir' 总结报告 (/B)。 'for' 循环遍历每一行 (/delims=) 并执行删除命令,强制和安静。我还使用隐藏标志 (/H) 来列出和删除一些神秘(例如 thumbs.db)文件。

      【讨论】:

      • 这对我也有用,我不得不在所有子文件夹中递归地删除与通配符匹配的某些文件,所以我使用了for /f "delims=" %i in ('dir /b /a-d /s "P:\Systems\A.L.P.S\~$PS*"') do @del /F /Q /A:H "%i",哇,它成功了!
      【解决方案6】:

      deltree /foo/* 应该可以正常工作。

      【讨论】:

      • 我很不幸在 Windows XP 上没有 deltree 命令
      • 那么你应该坚持使用@Ferruccio 的解决方案。
      【解决方案7】:

      我过去曾在批处理文件中使用过它。它使用 for 循环来导航目录结构。

      在这里,我从树中删除了 cvs 子目录,这是从一个分支复制到另一个分支时需要的。

      @echo off
      if /I exist CVS. rd CVS /s /q >nul
      for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z
      echo Batchfile %0 is complete
      

      【讨论】:

        【解决方案8】:

        尝试使用 Powershell:

        powershell -Command "Remove-Item '\foo\*' -Recurse -Force"
        

        【讨论】:

          【解决方案9】:

          为了防止删除 foo 目录,请尝试在删除之前将目录更改为 foo,例如:

          cd c:\foo rd /s /q c:\foo

          这将删除 foo 下的所有文件和文件夹,但不会删除 foo。将显示如下错误消息“该进程无法访问该文件,因为它正在被另一个进程使用。”

          【讨论】:

            猜你喜欢
            • 2011-01-02
            • 1970-01-01
            • 2023-04-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-21
            • 2020-03-25
            相关资源
            最近更新 更多