Fichier Batch

Résolu
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

3 réponses

  1. 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!

    1. Hello, après vérification je confirme que REN fonctionne sur un dossier.
    2. @Utilisateur anonymeBien 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.
    3. @barnabe0057Après vérification sur Windows 7 il s'avère que ce n'est pas nouveau.
    4. @barnabe0057La 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.
  2. 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
    1. Tu devrais mettre le setlocal plus haut.

      Je vois un gros problème ici :
      REN "Travail" %%Dossier à remplacer par REN "Travail" "!Dossier!"
    2. @barnabe0057Je 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.