Batch

Fermé
max - 4 sept. 2022 à 12:06
brucine Messages postés 14308 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 - 4 sept. 2022 à 13:49

Bonjour,

je me bas pour reussir a faire ce que je voudrais....
je souhaiterais que pour chaque fichier .cue dans un meme dossier, le nom de ce .cue sans lextension, soit mis en tant que variable, et quune commande utlisant cette varibale soit lancé, et ensuite que ca passe a la suite, au .cue suivant dans le dossier.

(la commande a lancer pour chaque fichier .cue trouvé est:
bchunk.exe ""nom du fichier".bin" ""nom du fichier".cue" "nom du fichier")

au mieux jai reussit a ce quil lexecute mais que pour le dernier fichier listé autant de fois quil y a de *.cue dans le dossier. et la jen suis arrivé a ce quil ne fasse plus rien car il ajoute un espace entre "nom du fichier" et les extension que je specifie dans ma commande avec ceci:

for /f "delims=" %%1 in ('dir /A-D /B *.cue') do (SET bin=%%~n1 & bchunk.exe "%bin%.bin" "%bin%.cue" "%bin%")

si quelquun aurait la gentillesse de maider...
 

merci davance


Windows / Firefox 104.0

1 réponse

brucine Messages postés 14308 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 24 avril 2024 1 812
4 sept. 2022 à 13:49

Bonjour,

Je ne suis pas sûr de ta ligne de commandes, je commente sur le plan général.

Sur le premier point, la boucle FOR lit le dernier fichier exécuté; pour traiter chaque fichier au fur et à mesure qu'ils sont lus, on doit soit passer par l'expansion des variables via setlocal enabledelayedexpansion et des variables exprimées par !var! au lieu de %var%, soit passer par une sous-routine via l'instruction CALL qui va appeler l'étiquette désignée où on effectue chaque commande et dont on revient au point de départ par EXIT /B.

Sur le deuxième, ce comportement est constant dans certaines commandes; il faut réduire le nom de la variable d'autant de caractères que nécessaire par la commande SET FOLDNAME=%FOLDNAME:~0,-n% où n est le nombre de caractères que je supprime à droite et tester le résultat par ECHO.

Un exemple d'une telle technique ici à adapter à ton cas:

 

@echo off
cd /D G:\
echo. > texte.txt

DIR /b \ma*>>tmp.txt

FOR /F "tokens=1 delims=" %%a IN (G:\tmp.txt) DO SET FOLDNAME=%%a & CALL :PROCESS
del texte.txt
DEL tmp.txt
GOTO :EOF

:PROCESS
SET FOLDNAME=%FOLDNAME:~0,-1%
IF NOT EXIST G:\%FOLDNAME%\texte.txt (
 xcopy /I G:\texte.txt G:\%FOLDNAME%\
 )
exit /b

:EOF
0