CMD递归删除文件夹(即多个位置的相同文件夹名称)

时间:2014-12-09 09:53:52

标签: batch-file cmd

由于Dreamweaver设置混乱,我们的网站dev& amp中已经出现了数千个“_notes”文件夹。 qa地区。通过Windows资源管理器删除太多 - 一切都只是锁定 - 所以我希望运行一个批处理脚本来为我们一劳永逸地解决它。问题是我不完全确定“rd / S”会做我想做的事。

我的理解是rd / S会在我告诉它的文件夹中递归查看,所以如果我说:

rd /S r:/<siteName>/_notes/

然后它只会查看_notes文件夹并删除其中的内容,然后尝试进一步向下移动该树。我需要的是一个会考虑以下内容的脚本:

r:/<siteName>/_notes/
r:/<siteName/<someFolder>/_notes/
r:/<siteName/<someOtherFolder>/_notes/
r:/<siteName/<someFolder>/<someSubFolder>/_notes/
r:/<siteName/<someFolder>/<iThinkIveMadeMyPoint>/_notes/

希望我有道理......

我在另一个帖子中发现了这个,但它不能用于带有文件夹的文件夹。在名称中,所以它对网站名称没用...

 @Echo OFF
 REM Important that Delayed Expansion is Enabled
 setlocal enabledelayedexpansion
 REM This sets what folder the batch is looking for and the root in which it starts the search:
 set /p foldername=Please enter the foldername you want to delete: 
 set /p root=Please enter the root directory (ex: C:\TestFolder)
 REM Checks each directory in the given root
 FOR /R %root% %%A IN (.) DO (
    if '%%A'=='' goto end   
    REM Correctly parses info for executing the loop and RM functions
    set dir="%%A"
    set dir=!dir:.=!
    set directory=%%A
    set directory=!directory::=!
    set directory=!directory:\=;!   
    REM Checks each directory
    for /f "tokens=* delims=;" %%P in ("!directory!") do call :loop %%P)
    REM After each directory is checked the batch will allow you to see folders deleted.
   :end
 pause
 endlocal
 exit
 REM This loop checks each folder inside the directory for the specified folder name. This allows you to check multiple nested directories.
 :loop
 if '%1'=='' goto endloop
 if '%1'=='%foldername%' (
    rd /S /Q !dir!
    echo !dir! was deleted.
 )
  SHIFT
  goto :loop
  :endloop

2 个答案:

答案 0 :(得分:2)

阅读HELP FORHELP SETHELP IF

请注意FOR /D /R将以递归方式遍历目录树。

另请注意,%~na是提取完整路径名称部分的有趣语法。

所以,把这些小块放到一边,在命令行上尝试这个命令

for /d /r %a in (*) do @if %~na==_notes @echo rd %a

仔细测试后,删除echo命令。

答案 1 :(得分:0)

这个命令对我有用,我希望这可以有所帮助。切换到公共根文件夹,然后键入CMD:

for /d /r . %d in (<folder name>) do @if exist "%d" rd /s/q "%d"

更改为要删除的文件夹的名称。然后将删除具有此名称的所有子文件夹。