Comment créer un fichier batch qui supprime récursivement tous les dossiers nommés `bin` ou` obj`?


31

J'ai besoin de supprimer tous les bin& objdossiers d'un dossier sur mon PC. Donc, je pense à un fichier batch pour le faire, mais je ne suis pas familier avec le fichier batch dans Windows. Veuillez aider.

[Modifier]

Après discussion avec l'utilisateur DMA57361, je suis arrivé à la solution actuelle (j'ai toujours un problème, voir nos commentaires):

Créez un fichier .bat et collez la commande ci-dessous:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

OU

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: Lorsque j'exécute votre script, j'obtiens l'erreur ci-dessous. Une idée?

texte alternatif


@Nam - pourquoi courez-vous for \/d \/r ...- pourquoi les doubles barres obliques au lieu de for /d /r ...? Et exécuter la version "complète" avec /qà la fin - comme je le dis - supprime tout sans avertissement donc ne renvoie aucune sortie (c'est-à-dire qu'il ne vous dit pas quand cela fonctionne, seulement quand il a une erreur), êtes-vous sûr que le deuxième exécuter ci-dessus n'a pas fonctionné correctement?
DMA57361

@Nam cette exécution n'est pas la même - dans l'image avec laquelle votre commande commence for / %d in et non for /d /r . %d in- vous devez utiliser la commande entière ci-dessous, chaque bit a une fonction différente et est important.
DMA57361

@Nam Opps, mes excuses, vous avez tout à fait raison, il n'imprime pas les premiers commutateurs! Cependant, cela ne jette pas cette erreur et semble fonctionner correctement, pour moi. Avez-vous essayé d'exécuter simplement la commande à partir de la ligne de commande, au lieu d'essayer de l'exécuter à partir d'un fichier de commandes?
DMA57361

Hmm, c'est étrange. Peut-être que votre Win7 fait quelque chose de différent avec le lot par rapport à mon WinXP alors, je ne sais pas quoi. Je pourrai vérifier Win7 à la maison ce soir, sinon j'ai bien peur d'être bloqué en ce moment ...
DMA57361

En fait, essayez de préfixer la commande batch avec startet voyez ce qui se passe. Pas idéal, mais je me demande si cela peut aider.
DMA57361

Réponses:


42

Cela a déjà été répondu sur Stack Overflow, d'où je tire l'essentiel de cette réponse.

Essayez la commande suivante, vous pouvez l'exécuter depuis l'intérieur cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Si vous avez besoin que d'autres dossiers soient modifiés, ajoutez simplement de nouveaux éléments à l' (bin,obj)ensemble au milieu de la commande.

Cela supprimera tout ce qui correspond sans avertissement et sans utiliser la corbeille - donc, si vous voulez un peu plus de sécurité, supprimez /ql'appel de rdà la fin, et le système devrait vous demander avant chaque suppression.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Si vous avez l'intention d'exécuter la commande à partir d'un fichier de commandes , vous devrez remplacer chaque instance de la variable %dpar %%d, comme ceci:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Selon la conversion avait dans la question des commentaires

Si la commande refuse de s'exécuter dans un fichier de commandes (impossible de répliquer ici), essayez de préfixer la commande avec start. Bien que cela démarre le processus pour s'exécuter simultanément avec le fichier de commandes, ce qui peut entraîner d'autres problèmes, il semble plus susceptible de fonctionner correctement.

En outre, si vous avez des fichiers nommés objou bindans l'arborescence de dossiers sur laquelle la commande fonctionne, vous recevrez un message d'erreur pour chaque fichier rencontré portant un nom correspondant. Ces fichiers correspondants ne sont pas supprimés et ne devraient pas gêner la commande en supprimant ce qu'ils devraient. En d'autres termes, ils peuvent être ignorés en toute sécurité.


1
Savez-vous peut-être comment je peux ignorer un dossier dans ce dossier racine où j'exécute cette commande?
Goran Obradovic

A parfaitement fonctionné! THX! +1
khr055

1

Ces commandes devraient fonctionner sur cmd.

del * .obj

del * .bin


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.