我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定文件,则保留所有文件和文件夹。文件将在根目录中。即。c: \list\12345\1\112345包含"完整"的txt文件,因此不要使用此文件夹和文件结构。即。c: \list\67891\1\167891不包含txt文件"complete",因此删除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 "%%~ffcomplete.txt" >nul 2>&1 || echo rd /s /q "%%~ff"
)
endlocal
根据需要进行调整。当控制台的输出正确时,在rd
之前删除echo
命令以删除目录。
当echo
命令存在时,要删除的目录列表将包括完整的分支,但当echo
被删除,并且rd
正在工作时,由于一次性分支中的第一个父级被删除,他的所有子级都将在同一操作中删除。