[BATCH] for dans un seul niveau de sous répertoire

Fermé
Pierre Goudat - 27 juil. 2017 à 11:50
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 - 28 juil. 2017 à 21:38
Bonjour à tous,

Je travaille actuellement sur un projet ou j'ai le besoin d'utiliser un script batch. Je souhaite récupérer des fichiers contenues dans un workspace avec l'extension *.prj pour effectuer une action dessus. Cependant je me suis rendu compte que je souhaite seulement récupérer tous les *.prj d'un workspace avec un seul niveau de sous répertoire.

admettons que j'ai l’arborescence suivante :

WORKSPACE
=> Sous Dossier 1
=> fichier.prj
=> Sous Dossier 2
=> fichier2.prj
=> Sous dossier 2
=> fichier.prj
=> Sous Dossier 2
=> fichier2.prj

=>fichier.prj



je souhaite traiter les fichier.prj en gras mais je ne souhaite pas traiter les fichier2.prj car il sont situé à plus de un sous répertoire du Workspace.

Jusqu'a présent voici mon for :

for /r "%WORKSPACE%" %%a in (*.prj) do (
"%COMPILO_PATH%\compile.exe" -release "%%a"
)


que dois-je ajouter au for pour seulement lire jusqu’à un sous répertoire ?

Merci d'avance à tous,

Bonne journée.
A voir également:

6 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 27 juil. 2017 à 18:48
Bonjour,

Essaie comme ça :

for /f "tokens=*" %%A in ('dir /b /ad "%WORKSPACE%"') do (
for /f "tokens=*" %%G in ('dir /b /a-d "%%~dpnA\*.prj"') do (
"%COMPILO_PATH%\compile.exe" -release "%%~dpnxG"
)
)



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
0
Pierre Goudat
28 juil. 2017 à 10:08
Bonjour Barnabe,

merci de votre réponse, j'ai effectivement essayé votre solution et on y est presque je pense.

En effet, le script trouve bien le sous dossier avec un *.prj cependant lorsqu'il exécute le *.prj dans le second for, il n'est pas au bon chemin.

Par exemple première boucle le script trouve un *.prj ici :

WORKSPACE\SousDossier1\toto.prj

cependant lorsqu'il essaie de l'exécuter, il envoie le chemin suivant :

WORKSPACE\toto.prj

Bonne journée,
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 28 juil. 2017 à 11:54
Ok j'ai corrigé le problème :

@echo off
setlocal enableextensions

set WORKSPACE=D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020

cd /d %WORKSPACE%

for /f "tokens=*" %%A in ('dir /b /ad "%WORKSPACE%"') do (
for /f "tokens=*" %%G in ('2^>nul dir /b /a-d "%%~dpnA\*.prj"') do (
"%COMPILO_PATH%\compile.exe" -release "%%~dpG%%~nA\%%~nxG"
)
)

pause
Endlocal
exit


Bonne journée également.
0
Pierre Goudat
28 juil. 2017 à 10:16
la réponse au script :



>for /F "tokens=*" %A in ('dir /b /ad "D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020"') do (for /F "tokens=*" %G in ('dir /b /a-d "%~dpnA\*.prj"') do ("C:\Program Files\National Instruments\CVI2012\compile.exe" -release "%~dpnxG" ) )

>(for /F "tokens=*" %G in ('dir /b /a-d "D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020\\*.prj"') do ("C:\Program Files\National Instruments\CVI2012\compile.exe" -release "%~dpnxG" ) )
Fichier introuvable

>(for /F "tokens=*" %G in ('dir /b /a-d "D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020\BurnIn_TRC9110_2C\*.prj"') do ("C:\Program Files\National Instruments\CVI2012\compile.exe" -release "%~dpnxG" ) )

>("C:\Program Files\National Instruments\CVI2012\compile.exe" -release "D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020\BurnIn_TRC9110.prj" )

Cannot open file 'D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020\BurnIn_TRC9110.prj'.



architecture :

TRC9110_Banc_OEDP_B0005_020 (racine du workspace)
=> BurnIn_TRC9110_2C (dossier)
=> BurnIn_TRC9110.prj (fichier)
0
Pierre Goudat
28 juil. 2017 à 12:06
Bonjour,

Je viens de l'essayer sur mon projet en question, ça a l'air de fonctionner ! je te remercie. je vais l'essayer sur d'autres projets de plus grande ampleur.

je ne comprend pas bien cependant les lignes suivantes :

"%%~dpG%%~nA\%%~nxG"

('2^>nul dir /b /a-d "%%~dpnA\*.prj"')

pourrait tu m'expliquer leur signification ?

Merci,
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 28 juil. 2017 à 12:19
Dans l'aide la commande FOR (for /?) tu trouveras ceci :
%~I         - étend %I en supprimant les guillemets (")
%~fI - étend %I en nom de chemin d’accès reconnu
%~dI - étend %I en lettre de lecteur uniquement
%~pI - étend %I en chemin d’accès uniquement
%~nI - étend %I en nom de fichier uniquement
%~xI - étend %I en extension de fichier uniquement
%~sI - chemin étendu contenant uniquement des noms
%~aI - étend %I en attributs du fichier
%~tI - étend %I en date/heure du fichier
%~zI - étend %I en taille du fichier
%~$PATH:I - parcourt les répertoires de la variable
d’environnement PATH et étend %I en nom du
premier fichier reconnu trouvé. Si le nom
variable d’environnement n’est pas défini
que le fichier n’est pas trouvé par la rec
alors ce modificateur étend en chaîne vide


Pour revenir au script :
%%~dpG = D:\Control.slave\workspace\TRC9110_Banc_OEDP_B0005_020

%%~nA = BurnIn_TRC9110_2C

%%~nxG = BurnIn_TRC9110.prj


Ca sera peut-être plus simple à comprendre comme ça :
d = drive (lecteur)
p = path (chemin)
n = nom
x = extension
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pierre Goudat
28 juil. 2017 à 13:24
Merci pour tes précisions, je comprend un peu mieux !

Merci beaucoup de ton aide :)

concernant le "tokens=*" on précise que le séparateur est : * ?
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 28 juil. 2017 à 13:45
Non le séparateur est indiqué par delims, pas par tokens

Ici tokens=* n'est pas obligatoire puisque par défaut il vaut déjà *, mais je le met par habitude.
0
Pierre Goudat > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
28 juil. 2017 à 13:42
que signifie donc tokens ?
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Pierre Goudat
Modifié le 28 juil. 2017 à 13:53
tokens indique les parties que tu souhaites utiliser, quand tu découpes une chaîne de caractères avec FOR /F

Par exemple tu as un fichier texte qui contient une ou plusieurs lignes, par exemple : bonjour il fait beau aujourd'hui

Tu vas parcourir le fichier texte et traiter chaque ligne grâce à FOR /F :
for /f "tokens=1,2,3,4,5 delims= " %%A in (fichier.txt) do (echo %%A %%B %%C %%D %%E)
pause

Observe la différence avec la commande précédente :
for /f "tokens=2,3,4 delims= " %%A in (fichier.txt) do (echo %%A %%B %%C)
pause
0
Pierre Goudat > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
28 juil. 2017 à 14:34
Merci pour te précisions
0
Pierre Goudat
28 juil. 2017 à 15:07
j'étais entrain de penser, ce code fonctionne t'il si le *.prj n'est pas dans un sous répertoire du workspace, mais directement à la racine du workspace ?

Bonne journée,
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
28 juil. 2017 à 15:31
Non il faut le modifier légèrement si tu veux prendre en compte ces fichiers.

Je dois m'absenter, à plus tard peut-être.
0
Pierre Goudat > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
28 juil. 2017 à 17:27
Merci de ton aide,

bon weekend
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Pierre Goudat
28 juil. 2017 à 21:38
Merci bon week-end également.
0