Je veux supprimer un dossier spécifique dans la racine et les subordonnés, le problème est que mon code supprime uniquement le dossier dans la racine du répertoire:
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%
)
C'est la structure du dossier:
E:sampledelete
├───folder1
├───folder2
│ └───somefolder
├───test
│ └───somefolder
├───newfolder
│ ├───test
│ │ └───somefolder
├───newfolder2
│ ├───test
après l'exécution du script, il est devenu:
E:sampledelete
├───folder1
├───folder2
│ └───somefolder
├───newfolder
│ ├───test
│ │ └───somefolder
├───newfolder2
│ ├───test
windows-10
batch
Albert222
la source
la source
Réponses:
Les questions sont annotées ci-dessous. Le problème principal était l'idée fausse d'un répertoire: vous ne cherchiez pas à l'intérieur du répertoire situé sous 1 nœud sous la racine. Vous avez eu la bonne idée. Puisque vous êtes "nouveau" comme vous l'avez dit, il serait intéressant d'analyser les différences.
la source
Vous ne comprenez pas quoi
for /d
Est-ce que.Est-ce que
SET %%i= dir 1
déclaration
SET %%i= dir 2
déclaration
SET %%i= dir 3
déclaration
Le problème est que vous ne faites que dire
for /d %%i in ( dir 1 ) faire déclaration
, oùdir 1
est%directory%\%dirname%
. Vous voulez utiliserfor /r
, qui effectue une recherche de répertoire récursive. Votre boucle devrait ressembler à quelque chose commela source
test
à tous les niveaux de l'arborescence. Etes-vous inquiet qu'il pourrait aussi y avoir des dossiers nommétest
? Je n’ai pas testé pour cela.