Fichier Batch

Résolu/Fermé
Mayu - 13 juin 2021 à 07:06
 Mayu - 13 juin 2021 à 08:35
Salut !
Je cherche à faire un petit Script qui permet de créer un dossier et des sous dossier.
La première fois, il va directement à la création et créé les dossiers.
La seconde fois, je voudrais qu'il renomme le dossier "Travail" en "Travail1" et faire la création comme la première fois.
La troisième fois, je voudrais qu'il renomme le dossier "Travail" en Travail2 (puisque le test indiquera que "Travail1" existe) et fait la création comme la première fois.

Le FOR semble fonctionner mais il ne se passe rien. Je n'arrive pas à concaténer le mot Travail et le chiffre. J'ai essayé SET Dossier="Travail" AND %I% mais ça ne marche pas. Si je fais ECHO %Dossier%, il m'affiche bêtement "Travail" AND %I%. Merci.

IF NOT EXIST "Travail" (GOTO Creation)

:Cherche
FOR /L %I IN (1,1,10) DO
(
SET Dossier=Travail%I%
IF NOT EXIST %Dossier% (GOTO Renomme)
)
GOTO Fin

:Renomme
REN "Travail" %Dossier%

:Creation
mkdir "Travail"
mkdir "Travail\JPEG"
mkdir "Travail\JPEG 1080"
mkdir "Travail\JPEG 1920"
mkdir "Travail\MSU Deflicker"
mkdir "Travail\RAW"

:Fin
A voir également:

3 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 13 juin 2021 à 08:02
Bonjour,

La commande REN renomme uniquement des fichiers, pour renommer des dossiers il faut utiliser la commande MOVE.

Concernant la variable de la boucle FOR, dans une invite de commandes elle se nomme %I mais à l'intérieur d'un script batch il faut doubler le % elle se nomme donc %%I, par conséquent votre commande est incorrecte :
SET Dossier=Travail%I% à remplacer par SET Dossier=Travail%%I


Concernant la variable %Dossier% elle est située à l'intérieur d'un bloc FOR donc il faut la retarder sinon elle ne fonctionnera pas comme attendu. Il faut donc activer l'expansion retardée au début du script comme ceci :
setlocal enabledelayedexpansion

Puis il faut indiquer qu'on souhaite retarder la variable, donc on remplacera %Dossier% par !Dossier!



0
Utilisateur anonyme
13 juin 2021 à 08:02
Hello, après vérification je confirme que REN fonctionne sur un dossier.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > Utilisateur anonyme
13 juin 2021 à 08:08
Bien vu ! J'ai réussi également, contrairement à ce que dit l'aide de la commande.

J'ai l'impression que c'est nouveau, il faut que je vérifie ça sur d'autres windows plus anciens.
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
13 juin 2021 à 08:17
Après vérification sur Windows 7 il s'avère que ce n'est pas nouveau.
0
brucine Messages postés 14320 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 26 avril 2024 1 814 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
13 juin 2021 à 08:21
La commande est "undocumented" (donc imprévisible?).
Mais il semble certain que, dans ces conditions, REN ne peut avoir pour destination un dossier inexistant et qu'il ne supporte pas les wildcards.
0
Merci mais après les corrections, je suis au même résultat. Rien ne se produit la seconde fois.
IF NOT EXIST "Travail" (GOTO Creation)

:Cherche
FOR /L %%I IN (1,1,10) DO
(
SET Dossier=Travail%%I
setlocal enabledelayedexpansion
IF NOT EXIST !Dossier! (GOTO Renomme)
)
GOTO Fin

:Renomme
REN "Travail" %%Dossier

:Creation
mkdir "Travail"
mkdir "Travail\JPEG"
mkdir "Travail\JPEG 1080"
mkdir "Travail\JPEG 1920"
mkdir "Travail\MSU Deflicker"
mkdir "Travail\RAW"

:Fin
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
13 juin 2021 à 08:16
Tu devrais mettre le setlocal plus haut.

Je vois un gros problème ici :
REN "Travail" %%Dossier à remplacer par REN "Travail" "!Dossier!"
0
barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908 > barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024
13 juin 2021 à 08:21
Je viens de remarquer un problème potentiel : la première parenthèse du bloc d'instructions du FOR doit se trouver sur la même ligne que le FOR, et non une ligne en dessous.
0
Impec ! Merci. L'erreur venait bien de la parenthèse.
0