2016-04-18 82 views
2

我想刪除具有特定名稱的所有目錄。例如。 「供應商」批處理:每個目錄和子目錄中的搜索目錄

d:\數據\ PROJECT1 \風向\廠商

d:\數據\ Project2的\ AnotherDir \ AnotherDir \廠商

d:\數據\項目3 \廠商

這就是我現在所擁有的。這列出了所有文件夾和子文件夾。

for /d %%a in (*) do dir /ad /on /s /b %%a 

現在我想把一個路徑放在一個變量中,並檢查目錄是否等於一個名稱(例如「vendor」)。但我找不到如何。

你能幫我嗎?

問候, 德米安

回答

1

這是我工作的解決方案,如果您有RimRaf安裝:

@ECHO off 

setlocal enableDelayedExpansion 

:: Folders where the batch program doesn't need to search. 
set skipTheseFolders=Decleir Pinokkio 

:: All the folders that need to be deleted 
set foldersToDelete=vendor node_modules 


for /d /r %%d in (*.*) do (

    @ECHO %%d 

    set folder=%%~nxd 
    set canI="true" 

    :: For loop to skip folders 
    for %%s in (%skipTheseFolders%) do (
     :: Need to be implemented 
     set canI="true" 
    ) 

    IF !canI! =="true" (
     for %%l in (%foldersToDelete%) do (
      :: If the folder is one of the folders To Delete  
      IF "!folder!" == "%%l" (
       @echo %%d 
       cd %%d 
       cd .. 
       :: Using Rimraf because when you delete node_modules, normal delete won't work 
       start /B rimraf !folder! 
      ) 
     ) 
    ) 
) 
1

的DIR命令有一個不幸的侷限性,它不能遞歸列出特定的文件夾名稱。最簡單的解決方案是列出所有文件夾,並使用FINDSTR過濾除匹配的文件夾外的所有文件夾。

dir /ad /on /s /b | findstr /iec:"\vendor" 

然後你只需使用FOR/F重複的結果,並添加您的RD命令

for /f "eol=: delims=" %%F in 
    'dir /ad /on /s /b ^| findstr /iec:"\vendor"' 
) do rd /s /q "%%F" 2>nul 
+0

沒有選項'/ y'用'rd'命令;但'/ s'沒關係 – Hackoo

+0

@Hackoo - 是的,謝謝。這是我的意圖。所有固定。 – dbenham

0

你可以試試這個:

@Echo OFF 
set "Folder=D:\Data" 
set "FolderString=vendor" 
Setlocal Enabledelayedexpansion 
FOR /f "tokens=*" %%F IN ('dir /b /s /ad %Folder%\ ^| find "%FolderString%"') DO (set var="%%F" 
ECHO rd /s /q !var! && rd /s /q !var!) 
EndLocal 
pause