cmd行语法删除文件不存在的文件夹

时间:2013-12-13 23:39:05

标签: cmd rd

我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定的文件,则保留所有文件和文件夹。该文件将在根目录中。 即 C:\目录\ 12345 \ 1 \ 1 12345包含txt文件“完成”,因此请单独保留此文件夹和文件结构。 即 C:\目录\ 67891 \ 1 \ 1 67891不包含txt文件“complete”,因此请删除67891及其所有子文件夹和文件。

我什么都没试过。我是cmd shell的新手。或者也许是一个能够做到这一点的工具。

2 个答案:

答案 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正在运行,因为一次性中的第一个父项如果删除了分支,则会在同一操作中删除所有后代。