我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定文件,则保留所有文件和文件夹。该文件将位于根目录中。即 c:\list\12345\1\1 12345 包含 txt 文件“完整”,所以不要管这个文件夹和文件结构。即 c:\list\67891\1\1 67891 不包含 txt 文件“完整”,因此删除 67891 及其所有子文件夹和文件。
我什么都没试过。我对 cmd shell 完全陌生。或者也许有一个工具可以做到这一点。
已编辑这是未经测试的。它会创建file.bat.txt
供您检查,然后如果其中包含正确的文件夹,您就可以运行它。检查file.bat.txt
并对其感到满意后,您可以将其重命名为file.bat
并运行它以删除文件夹。
下面的代码所做的是:在 c:\list 下创建一个名为 complete.txt 的任何文件的所有路径列表,然后比较only the root folder
主文件夹中的每个文件夹。如果在列表中找不到根文件夹,则它会回显 RD 命令将其删除到file.bat.txt
@echo off
set "folder=c:\list"
if not defined folder goto :EOF
dir "%folder%\complete.txt" /b /s /a-d >temp.tmp
del file.bat.txt 2>nul
for /f "delims=" %%a in ('dir "%folder%" /b /ad ') do (
find /i "%folder%\%%a" <"temp.tmp" >nul || >>file.bat.txt echo rd /s /q "%folder%\%%a"
)
:del temp.tmp
@echo off
setlocal enableextensions disabledelayedexpansion
for /r "c:\list" %%f in (.) do (
dir /s /b "%%~ff\complete.txt" >nul 2>&1 || echo rd /s /q "%%~ff"
)
endlocal
根据需要进行调整。当控制台的输出正确时,删除删除目录echo
之前的命令rd
。
当echo
命令存在时,要删除的目录列表将包括完整的分支,但是当echo
被删除并且rd
正在工作时,由于一次性分支中的第一个父级已被删除,因此他的所有后代都会在同一操作中被删除。