Supprimer le premier caractère

NormandieB Messages postés 4 Statut Membre -  
NormandieB Messages postés 4 Statut Membre -
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. jogadyl Messages postés 14 Statut Membre
     
    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
  2. NormandieB Messages postés 4 Statut Membre
     
    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
  3. NormandieB Messages postés 4 Statut Membre
     
    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
  4. jogadyl Messages postés 14 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. NormandieB Messages postés 4 Statut Membre
     
    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