Supprimer le premier caractère

Fermé
NormandieB Messages postés 4 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 7 mai 2015 - 6 mai 2015 à 09:41
NormandieB Messages postés 4 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 7 mai 2015 - 7 mai 2015 à 17:08
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.
A voir également:

5 réponses

jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
6 mai 2015 à 20:53
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
NormandieB Messages postés 4 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 7 mai 2015
7 mai 2015 à 09:59
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
NormandieB Messages postés 4 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 7 mai 2015
7 mai 2015 à 10:23
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
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
Modifié par jogadyl le 7/05/2015 à 16:52
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NormandieB Messages postés 4 Date d'inscription mercredi 6 mai 2015 Statut Membre Dernière intervention 7 mai 2015
7 mai 2015 à 17:08
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