Supprimer le premier caractère

Bonjour, je suis en train de faire un batch pour mettre à jour les répertoires client de mon programme.
Ces Répertoire ont un nom comme suit : $001, $002, $003...$XXX.

Pour mettre à jour ces répertoire, j'exécute le programme avec en paramètre le nom du répertoire sans le $.
exemple : MonProgramme.exe -d001

Là je commence à avoir beaucoup de répertoires.
Donc un petit BATCH automatisant ça m'aiderai beaucoup.

Voici la base de mon BATCH :

rem remplissage du fichier rep.txt
dir $* /ad/b>D:\rep.txt

@echo off
for /F %%I in ('type d:\rep.txt') do (
MonProgramme.exe -d%%I
)


Je n'arrive pas à virer le $ dans %%I

Si vous avez une idée, Merci beaucoup.

5 réponses

  1. Bonjour,

    Tu pourrais essayer quelque chose comme ça :
    setlocal enabledelayedexpansion
    @echo off
    for /d %%I in ($*) do (
    set rep=%%I
    set rep=!rep:$=!
    monprogramme.exe -d!rep!
    )
    0
    1. Bonjour jogadyl,

      j'ai testé ta solution, impécable.

      Grand merci de ton aide.

      Voici le programme en entier :

      rem remplissage du fichier rep.txt
      dir $* /ad/b>D:\rep.txt

      @echo off
      for /F %%I in ('type d:\rep.txt') do (
      setlocal enabledelayedexpansion
      @echo off
      for /d %%I in ($*) do (
      set rep=%%I
      set rep=!rep:$=!
      MonProgramme.exe -d!rep!
      )
      )
      0
      1. Rebonjour,

        en fait, ça fonctionne pas...
        ça me paraissais long, j'ai cassé le processus et j'ai fait un echo plutot que de lancer directement le programme :

        rem remplissage du fichier rep.txt
        dir $* /ad/b>D:\rep.txt

        @echo off
        for /F %%I in ('type d:\rep.txt') do (
        setlocal enabledelayedexpansion
        @echo off
        for /d %%I in ($*) do (
        set rep=%%I
        set rep=!rep:$=!
        echo MonProgramme.exe -d!rep!
        )
        )


        en fait il lance le programme mais je ne sais pas si il change de répertoire.

        das la fenêtre DOS, j'ai :

        MonProgramme.exe -d001
        MonProgramme.exe -d002
        MonProgramme.exe -d003
        MonProgramme.exe -d004
        MonProgramme.exe -d005
        MonProgramme.exe -d006
        MonProgramme.exe -d007
        MonProgramme.exe -d008
        MonProgramme.exe -d009
        MonProgramme.exe -d010
        MonProgramme.exe -d011
        MonProgramme.exe -d012
        MonProgramme.exe -d013
        MonProgramme.exe -d014
        MonProgramme.exe -d015
        MonProgramme.exe -d016
        ...
        MonProgramme.exe -dXXX

        et j'ai ces ligne plusieurs fois, entrecoupées de :
        "Niveau maximal de récursivité de setlocal a été atteint"

        OK, je crois que je l'ai...

        setlocal enabledelayedexpansion
        @echo off
        for /d %%I in ($*) do (
        set rep=%%I
        set rep=!rep:$=!
        echo MonProgramme.exe -d!rep!
        )


        Tout simplement que je comprends rien... Il fallait que je remplace mon programme entier par le tiens jogadyl.

        Là ça ne me mets les lignes echo qu'une seule fois.
        Je vais tester un réel.

        J'ai pas trop compris le pourquoi du comment de ton programme, je pense que c'est le /d du FOR qui arrange tout.

        Encore merci.
        0
        1. Ok ! J'explique un peu.
          D'abord, comme du l'as compris, il n'y a qu'une seule boucle et ce n'est pas la peine de faire un fichier avec le nom des répertoires.

          For /d %%I in ($*)
          La variable %%I prend successivement le nom des répertoires. Sans le /d, la variable prendrait le nom des fichiers plutôt que celui des répertoires.

          setlocal enabledelayedexpasion
          Permet d'utiliser le ! à la place du % pour forcer la variable à être évaluée au cours du traitement. Sinon elle garderait toujours la même valeur.

          set rep=%%I
          set rep=!rep:$=!

          la variable rep est d'abord chargée avec le nom du répertoire
          et ensuite on remplace les "$" par rien du tout dans le nom du répertoire.
          (regarde l'aide de la commande SET)
          0
          1. J'ai testé, ça marche super bien.
            Merci de ton aide et de tes explications, je pense que ça va me servir.
            J'aime aussi cette idée de remplacer le $ par rien. C'est tout bête...
            Oui, va falloir que je creuse un peu sur la commande SET.

            Grand merci à toi.
            0