Löschen Sie bestimmte Ordner im Stammverzeichnis und in Unterordnern.

Löschen Sie bestimmte Ordner im Stammverzeichnis und in Unterordnern.

Ich möchte einen bestimmten Ordner im Stammverzeichnis und Unterordner löschen. Das Problem besteht darin, dass mein Code nur Ordner im Stammverzeichnis des Verzeichnisses löscht:

SET dirname=test
SET directory=%cd%
SET found=false


    if NOT "%1%" == "" (
        set directory=%1%
    )
    echo Searching for %dirname% in %directory%

    for /d %%i in (%directory%\%dirname%) do (
        IF EXIST %%i (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

Dies ist die Ordnerstruktur:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───test
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

nach dem Ausführen des Skripts änderte es sich zu:

E:sampledelete
├───folder1
├───folder2
│   └───somefolder
├───newfolder
│   ├───test
│   │   └───somefolder
├───newfolder2
│   ├───test

Antwort1

Die Probleme sind unten aufgeführt. Das Hauptproblem war ein falsches Verständnis des Verzeichnisses: Sie haben nicht im Verzeichnis unter einem Knoten unter root nachgesehen. Sie hatten die richtige Idee. Da Sie, wie Sie sagten, „neu“ sind, wäre es lohnend, die Unterschiede zu analysieren.

@echo off
SET dirname=test
SET directory=%cd%
SET found=false

    if NOT "%1%" == "" (
        set directory=%1%
    )

    REM We want to look in the current directory not in for Z:\test
    for /d %%i in (%directory%*) do (
        echo Searching for %%i\%dirname% in %directory%

        REM We already know the folder existed because "do" ran.
        REM We want to look beneath the root directory
        IF EXIST %%i\%dirname% (
            REM change the sentinel value
            set found=true

            REM we want to delete the nodes beneath not the one in root
            echo Deleting the folder %%i\%dirname%

            REM Delete a folder
            REM we want to delete the nodes beneath not the one in root
            RD  /s /q %%i\%dirname%
        )

        IF %%1 == %dirname% (
            REM change the sentinel value
            set found=true

            REM Delete a folder, even if not empty, and don't prompt for confirmation
            echo Deleting the folder %%i\%dirname%
            RD  /s /q %%i
        )
    )

    REM logic to do if no files were found
    if NOT "%found%" == "true" (
        echo No directories were found with the name of %dirname%
    )

Antwort2

Sie verstehen nicht, was for /des bedeutet.

für /d %%i in (Verzeichnis 1 Datei 1 Verzeichnis 2 Datei 2 Verzeichnis 3 Datei 3) TunStellungnahme

tut

  • SET %%i=dir1
  • statement
  • SET %%i=dir2
  • statement
  • SET %%i=dir3
  • statement

Das Problem ist, dass Sie nur sagen , wo ist . Sie möchten verwenden , was eine rekursive Verzeichnissuche durchführt. Ihre Schleife sollte ungefähr so ​​aussehenfor /d %%i in (dir1) do statementdir1
%directory%\%dirname%for /r

    for /r %directory% %%i in (.) do (
        if exist %%i\%dirname% (
            REM change the sentinel value
            set found=true

            echo Deleting the folder %%i\%dirname%
            REM Delete a folder, even if not empty, and don't prompt for confirmation
            RD  /s /q %%i\%dirname%
        )
    )

verwandte Informationen