recursion删除Windows中某些文件以外的目录

在Windows中,我需要recursion删除除了要保留的文件的短列表之外的目录。 这些文件可能嵌套在子目录中。

我试图在运行“rmdir / s”之前将文件设置为只读,但不起作用。 只读文件不能直接删除,但是在用“rmdir / s”删除的子目录内删除。

任何其他的想法?

据我所知,你真的不能有两种方式 – 删除是recursion(一切都是)或不recursion(你明确列出你想要的东西)。

你在Unix系统上使用的只读技巧的唯一原因是因为失败/错误在树上传播(你不能删除仍然有孩子的东西),而且从你的testing中可以看出,Windows是less的特别是关于这个。

  1. search所需的文件。
  2. find后,将所需的文件/文件夹树复制到临时位置。
    • 具有正确选项的Robocopy可以保留属性和时间戳。
  3. 删除目录。
  4. 将文件/文件夹树复制回原始位置。
  5. …?
  6. 利润!

一个比我更好的脚本,甚至可以使用robocopy自动完成整个事情。 关于我的头,我想也许你复制出你想要的文件列表,并使用/MIR选项将原始目录中不在目标目录中的所有东西都删除。

我能够用一些批处理代码来做到这一点,但是这个过程相当长:

 setlocal enabledelayedexpansion :: Delete files not containing "foo" for /r MyDir %%i in (*) do ( set temp=%%~nxi if "!temp:foo=!"=="!temp!" ( del "%%i" ) ) :: Build recursive list of dirs, sorted by deepest first set dirs= for /r MyDir /d %%i in (*) do ( set dirs="%%i" !dirs! ) :: Delete dirs. Nonempty dirs will be skipped. for %%i in (%dirs%) do ( rmdir %%i ) 

隐藏的文件不会被删除。

  1. attrib + h为不删除的文件
  2. 删除所有的文件
  3. 删除空目录
  4. attrib + h保存的文件。

Vg:

 for /f "delims=" %i in ('dir "My Dir\\*.log" /b /s') do attrib +h "%i" for /f "delims=" %i in ('dir "My Dir" /b /s') do del "%i" /q rmdir /s for /f "delims=" %i in ('dir "My Dir" /b /s /ah') do attrib -h "%i"