2016-04-18 7 views
2

Ich möchte alle Verzeichnisse mit einem bestimmten Namen löschen. Z.B. "Verkäufer"Batch: Verzeichnis in jedem Verzeichnis und Unterverzeichnis durchsuchen

D: \ Data \ Project1 \ Dir \ Anbieter

D: \ Data \ Projekt2 \ AnotherDir \ AnotherDir \ Anbieter

D: \ Data \ Project3 \ Anbieter

Dies ist, was ich in diesem Moment habe. Dies listet alle Ordner und Unterordner auf.

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

Nun wünsche ich einen Weg in eine Variable setzen, und prüfen Sie, ob das Verzeichnis auf einen Namen (zum Beispiel „Verkäufer“) gleich ist. Aber ich kann nicht finden wie.

Können Sie mir helfen?

Grüße, Demian

Antwort

1

Dies ist meine Arbeitslösung, wenn Sie RimRaf haben installiert:

@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

Der DIR-Befehl hat eine unglückliche Einschränkung, dass es nicht rekursiv bestimmte Ordnernamen auflisten können. Die einfachste Lösung besteht darin, alle Ordner aufzulisten und mit FINDSTR alle bis auf die übereinstimmenden Ordner herauszufiltern.

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

Dann iterieren Sie einfach die Ergebnisse FOR/F und geben Sie Ihren RD-Befehl hinzufügen

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

Es gibt keine Option '/ y' mit' rd' Befehl; aber '/ s' ist es OK – Hackoo

+0

@Hackoo - Ja, danke. Das war es, was ich vorhatte. Alles behoben. – dbenham

0

Sie können dies versuchen:

@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 
Verwandte Themen