1 votes

Je n'ai jamais écrit de fichiers batch, mais j'ai besoin d'aide pour en créer un qui recherche et supprime tous les sous-dossiers d'un nom spécifique.

J'ai besoin d'un simple fichier batch qui puisse rechercher mon " F:\Temp Dans le répertoire "Subs" avec de multiples dossiers (de noms différents), recherchez les sous-dossiers nommés "Subs", et supprimez-les, ainsi que tous les fichiers que les dossiers "Subs" peuvent contenir. En utilisant des questions similaires posées ici, j'ai construit le script ci-dessous, mais il ne semble pas trouver les dossiers "Subs" dans le répertoire.

for /f %%i in ("F:\Temp\***\Subs") do rd /s "%%~i"

Il est important de noter, que je ne sais pas ce que /f %%i fait, ainsi que le %%~i . De plus, je ne suis pas sûr que mon joker soit correctement configuré. Juste pour être clair, les dossiers directement en dessous de F:\Temp sont de noms divers, et n'ont aucune similitude. La seule chose que je veux trouver et supprimer sont les sous-dossiers nommés Subs dans ces dossiers aux noms variés dans F:\Temp .

0voto

DavidPostill Points 140654

Je veux supprimer les sous-répertoires nommés Subs dans les répertoires de F:\Temp

Ce qui suit devrait fonctionner :

@echo off
setlocal enabledelayedexpansion
cd /d f:\Temp
for /f "tokens=*" %%i in ('dir /a:d /b /s Subs') do (
  echo "%%i"
  rem rd /s "%%i"
  )

Vérifiez la sortie, puis retirez le rem antes de rd s'il correspond aux bons sous-répertoires.

Je ne sais pas ce que /f %%i hace

Il s'agit des arguments d'un for commandement.

Le fonctionnement de la commande FOR peut être résumé comme suit...

  • Prenez un ensemble de données
  • Faites un FOR Paramètre %%G égale à une partie de ces données
  • Exécuter une commande (en utilisant éventuellement le paramètre comme partie de la commande).
  • Répétez pour chaque élément de données

Ver Pour - Commandes en boucle - Windows CMD - SS64.com pour une explication complète

ainsi que le %%~i

Cela n'a aucun sens.

Je ne suis pas sûr que mon joker F:\Temp\***\Subs est configuré correctement

Vous ne pouvez pas avoir de caractères de remplacement au milieu d'un nom de sous-répertoire. Ils doivent être à la fin.


Autres lectures

0voto

iTwasnTme Points 5586

Vous pouvez également le faire avec For /R [Folder] /D :

@echo off

for /r "F:\Temp" /d %%i in (*Subs
    )do echo\%%~nxi & rmdir /s /q "%%~dpnxi"


Obs.. : Pour s'assurer que le dossier à supprimer contient les chaînes de caractères \Subs et non un autre contenant la chaîne de caractères subs dans le nom, je recommande de faire un filtre avec la fonction | find "\Strings" :

for...()do echo\%%~dpi%%~nxi | find /i "\Subs" && run rd ...
  • Votre batte ne supprimera les dossiers que s'ils sont trouvés dans le chemin et le nom de la base de données. \Subs cordes, et votre lot ressemblerait à ceci :

    @echo off

    for /r "F:\Temp" /d %%i in (*Subs)do ( echo\%%~dpi%%~nxi | find /i "\Subs" && rd /s /q "%%~dpnxi" )



Ce qui peut et va aider dans de nombreuses commandes serait de vous familiariser avec :


For
For /r 
For /d
For loop expanding variables

  • Utilisation d'un For boucle, vous pouvez étendre votre variable :

    %~i   - expands %i removing any surrounding quotes (")
    %~fi  - expands %i to a fully qualified path file/dir name only
    %~ni  - expands %i to a file/dir name only
    %~xi  - expands %i to a file/dir extension only
    
    %%~nxi => expands %%~i to a file/dir name and extension
  • Use the FOR variable syntax replacement: %~pi - expands %i to a path only %~ni - expands %i to a file name only %~xi - expands %i to a file extension only

  • The modifiers can be combined to get compound results: %~pni - expands %i to a path and file name only %~pnxi - expands %i to a path, file name and extension only

Obs . : A propos de l'utilisation %%~nxi sur directory nom observation note dans ss64.com :

  • Full Stop Bug Although Win32 will not recognise any file or directory name that begins or ends with a '.' (period/full stop) it is possible to include a Full Stop in the middle of a directory name and this can cause issues with FOR /D.

  • Parameter expansion will treat a Full Stop as a file extension, so for a directory name like "Sample 2.6.4" the output of %%~nI will be truncated to "Sample 2.6" to return the whole folder name use %%I or %%~nxI


Con for /d tous les répertoires seront listés dans la boucle, et leurs noms de source seront dans le fichier %%~nxi qui peut être utilisé dans le echo\%%~nxi & rmdir /s /q "%%~dpnxi" syntaxe de la commande.


SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X