Bonjour à tous,
le contexte : pour aider des radiologues à transmettre à notre service une série de clichés numérisés nous leur adressons une clé USB cryptée dans laquelle se trouve une arborescence de sous-répertoires dont le 1er niveau d'arborescence est l'identifiant du patient et le 2e niveau un nom composé du type de cliché et de la date de réalisation (cette arborescence est crée par script VBA à partir d'un tableau Excel mais peu importe). Le problème que nous rencontrons est que lorsqu'il y a beaucoup de clichés, il est fréquent que quelques-uns soient oubliés. Pour cette raison je souhaiterais faire un petit batch placé dans la clé USB qui leur fournirait directement la liste des clichés manquants dans un fichier texte (en récupérant simplement la liste des sous-répertoires de 2e niveau vides).
la difficulté:
--> la syntaxe ci-dessous fonctionne bien pour compter le nombre de clichés dans un sous-répertoire de 2e niveau:
Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for /r MonSousRepertoire %%j in (*.bmp,*.jpg,*.png,*.jpeg,*.raw,*.tiff) do set VrImage=%%j& set /a Compt+=1 echo Test : der image du dossier : %VrImage% echo Test : Nb fichiers img ds MonSousRepertoire = %Compt% pause :: si aucune radio dans RepertoireRX alors "Compt" est null et on intègre %%j au fichier de sortie If "%Compt%"=="" ( echo Radio absente : %%j >> Rx_Abstes2.txt )
--> mais il faut bien générer une boucle itérative pour parcourir tous ces répertoires de 2e niveau (j'obtiens dans la 1ère partie du batch la liste de tous ces répertoires de 2e niveau dans le fichier texte "Liste_sous_dossiers_RX.txt").
C'est dans l'imbrication des boucles que ça se gâte, alors que la syntaxe qui coince est la même que ci-dessus et que la variable contenant le chemin complet du sous-répertoire de 2e niveau est exacte:
La ligne : for /r !RepertoireRX! %%j in (*.bmp,*.jpg,*.png,*.jpeg,*.raw,*.tiff) do set VrImage=%%j& set /a Compt+=1 ne déclenche pas d'erreur mais ne permet plus ni de compter le nombre de clichés présents ni de récupérer le nom du dernier cliché ...
Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 setlocal enableDelayedExpansion for /F %%D in (%CD%Liste_sous_dossiers_RX.txt) do ( :: creation d'une sous-boucle uniquement pour recuperer le sous-repertoire dans variable RepertoireRX :: le tokens etoile et le délimiteur antislash permettent de récupérer le chemin complet for /F "tokens=* delims=\" %%E in ("%%D") do ( set RepertoireRX=%%E echo chemin répertoire récupéré via sous-boucle For avec tokens = etoile : "!RepertoireRX!" :: la boucle ci-dessous ne fonctionne pas quand elle est intégrée à une autre boucle ... serieux pb ... for /r !RepertoireRX! %%j in (*.bmp,*.jpg,*.png,*.jpeg,*.raw,*.tiff) do set VrImage=%%j& set /a Compt+=1 echo Test : der image repertoire : %VrImage% "-->ECHEC (sans déclenchement erreur ligne précédente) : VrImage est vide même si une radio est présente dans !RepertoireRX!" echo Test : Le dossier !RepertoireRX! contient %Compt% fichiers radiographiques " -->ECHEC : Compt est vide" pause :: si aucune radio dans RepertoireRX alors "Compt" est null et on intègre RepertoireRX au fichier de sortie If "%Compt%"=="" ( echo Radio absente : !RepertoireRX! >> Rx_Abstes2.txt ) ) ) endlocal
C'est peut être tout bête (je suis totalement newbie en batch), en tout cas toute aide serait très bienvenue!
Partager