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 /d
es 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 statement
dir1
%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%
)
)