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

cmd行语法,用于删除文件不存在的文件夹,cmd,rd,Cmd,Rd,我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定文件,则保留所有文件和文件夹。该文件将位于根目录中。 即 c:\list\12345\1\1 12345包含完整的txt文件,因此不要使用此文件夹和文件结构。 即 c:\list\67891\1\1 67891不包含完整的txt文件,因此请删除67891及其所有子文件夹和文件 我什么也没试过。我对cmd shell完全是新手。或者可能有一个util可以做到这一点。这是未经测试的。它会创建file.bat.txt供您检查,然后如

我需要删除根目录中不存在指定文件的所有文件夹和子文件夹,但如果找到指定文件,则保留所有文件和文件夹。该文件将位于根目录中。 即 c:\list\12345\1\1 12345包含完整的txt文件,因此不要使用此文件夹和文件结构。 即 c:\list\67891\1\1 67891不包含完整的txt文件,因此请删除67891及其所有子文件夹和文件

我什么也没试过。我对cmd shell完全是新手。或者可能有一个util可以做到这一点。

这是未经测试的。它会创建file.bat.txt供您检查,然后如果其中有正确的文件夹,您可以运行它。检查file.bat.txt并对其满意后,可以将其重命名为file.bat并运行它以删除文件夹

下面的代码所做的是:创建一个指向c:\list下名为complete.txt的任何文件的所有路径的列表,然后只比较主文件夹中每个文件夹的根文件夹。如果在列表中找不到根文件夹,则会回显RD命令以将其删除到file.bat.txt中

根据需要进行调整。当控制台的输出正确时,在rd之前删除echo命令以删除目录


当echo命令存在时,要删除的目录列表将包括完整的分支,但是当echo被删除,并且rd正在工作时,由于一次性分支中的第一个父级被删除,所以他的所有子级都将在同一操作中被删除。

我不完全理解您的问题。。。您会说,“如果文件夹c:\list\1包含指定的文件,则删除c:\list\1,然后”但如果在根目录中找到指定的文件,则保留这些文件夹和文件”,这样,只有在其中一个子文件夹包含该文件时,才应删除该文件夹,而不是在该文件位于根文件夹中时?空文件夹呢?你给我们的两个条件对我来说毫无意义!如果某个特定文件仅在其子文件夹中找到,而不在根文件夹中,它是否应该删除该文件夹?因此,如果该文件夹及其所有父文件夹(直到某个特定根文件夹)都包含某个文件,您希望保留该文件夹,对吗?否则,该文件夹应该被删除,要么是在所有家长都有该文件但该文件夹没有的情况下单独删除,要么是与没有该文件的家长一起删除,对吗?还有,你尝试了什么?重新表述了问题。不管是否有任何内容,甚至是否有子文件夹。如果该txt文件存在,请继续,如果不存在,请删除该文件所在的根文件夹以及所有子文件夹和文件。哇-太棒了!谢谢你给我一个好的开始!它没有创建rd命令文件。我不明白,我在谷歌上搜索,为什么我现在在| |或>>nul | |>>file.bat.txt echo rd/s/q%%a上没有被期待。我试着一次删除一个,但我确信这里需要一些东西。我有几个打字错误,findstr命令挂起,所以我在上面的编辑中修复了它。它将为每个不匹配的文件夹创建一个RD命令,因此将有多个冗余RD命令,但if-exist命令将只执行所需的命令。我花了大约3个小时来考虑这个问题并尝试不同的事情。。。输出文件.bat.txt包含整个目录列表。我需要它包含temp.tmp中没有的内容,并且在根级别有一些条目,如rd c:\list\12345\1,我想在根级别删除这些条目-rd c:\list\12345。另外,你能推荐一个好的网站来使用cmd、变量、开关等所有你在这里使用的东西吗?我找到了一些片段,但如果有一个全面的网站专门介绍cmd的话,如果没有为傻瓜购买cmd就好了。谢谢你的帮助!我的代码操作简单,但它不会从任何深度目录路径中删除所有重复项。在任何情况下,如果IF-EXIST试图删除已删除的文件夹,它将消除错误消息。消除冗余线路的速度差异将很小,并且需要更多的代码。它不应该包含整个目录列表,因为查找将删除包含文件的树的任何部分。但整个目录如预期一样位于file.bat.txt:temp.tmp=c:\list\12345\complete.txt c:\list\12345 copy\complete.txt中,而file.bat.txt=if exist c:\list\67891 rd/s/q c:\list\67891 rd/s/q c:\list\12345\1 rd/s/q c:\list\12345 copy\1 rd/s/q c:\list\12345 copy\1 if exist c:\list\67891 rd/s/qc:\list\67891\1。IE 67891不应在此文件中。我真的很感谢这个网站和你的帮助-谢谢你
@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