在Windows中,我需要recursion删除除了要保留的文件的短列表之外的目录。 这些文件可能嵌套在子目录中。
我试图在运行“rmdir / s”之前将文件设置为只读,但不起作用。 只读文件不能直接删除,但是在用“rmdir / s”删除的子目录内删除。
任何其他的想法?
据我所知,你真的不能有两种方式 – 删除是recursion(一切都是)或不recursion(你明确列出你想要的东西)。
你在Unix系统上使用的只读技巧的唯一原因是因为失败/错误在树上传播(你不能删除仍然有孩子的东西),而且从你的testing中可以看出,Windows是less的特别是关于这个。
一个比我更好的脚本,甚至可以使用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 )
隐藏的文件不会被删除。
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"