我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定的文件,则保留所有文件和文件夹。该文件将在根目录中。 即 C:\目录\ 12345 \ 1 \ 1 12345包含txt文件“完成”,因此请单独保留此文件夹和文件结构。 即 C:\目录\ 67891 \ 1 \ 1 67891不包含txt文件“complete”,因此请删除67891及其所有子文件夹和文件。
我什么都没试过。我是cmd shell的新手。或者也许是一个能够做到这一点的工具。
答案 0 :(得分:0)
已编辑这是未经测试的。它创建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
答案 1 :(得分:0)
@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
正在运行,因为一次性中的第一个父项如果删除了分支,则会在同一操作中删除所有后代。