Page 1 sur 1

Besoin d'aide pour un script windows

Posté : 20 juil. 2017 15:41
par MichelB
Bonjour,

j'ai besoin d’écrire un petit script pour incrémenter un "nometchiffre" de 1 à 40000 uniquement la valeur numérique, la partie alphabétique reste pareille.
à titre d'exemple:
J'ai un fichier TXT, qui contient:
JOB001
5 lignes de texte
Puis
JOB002
5 lignes de texte
JOB003
5 lignes de texte
Etc..
je souhaite modifier toutes les valeurs JOBXXX par JOB001 jusque JOB40000

je suis preneur de tout conseil et aide pour réaliser ce petit script.

Merci par avance.

Re: Besoin d'aide pour un script windows

Posté : 20 juil. 2017 17:37
par barnabe0057
Bonjour,

Tu ne peux pas modifier le fichier directement, mais tu peux en créer un nouveau à partir du fichier source :

Code : Tout sélectionner

@echo off
Setlocal enableextensions enableDelayedExpansion

set source=fichier.txt
set destination=nouveau.txt

set /a nombre=0

for /f "tokens=*" %%A in (%source%) do (
    if "%%A"=="" (echo.>> %destination%) else (
    (echo %%A | findstr "JOB" > nul) && (set /a nombre+=1 & echo JOB!nombre! >> %destination%) || (echo %%A >> %destination%)
    )
)

notepad %destination%

Endlocal
exit

Re: Besoin d'aide pour un script windows

Posté : 21 juil. 2017 13:53
par MichelB
Bonjour,

je vous remercie pour ce script qui fonctionne bien je viens de procéder un test.
Par contre, je ne comprends pas pourquoi le script s’arrête au chiffre 5038??
j'ai tenté de comprendre le déroulement du script mais je ne vois pas cette limite.

Merci par avance de votre aide.

Re: Besoin d'aide pour un script windows

Posté : 21 juil. 2017 13:54
par MichelB
Bonjour,

je vous remercie pour ce script qui fonctionne bien je viens de procéder un test. j'aurai souhaité que les chiffres soient sur trois positions et non pas une comme actuellement avec ce script.
Par contre, je ne comprends pas pourquoi le script s’arrête au chiffre 5038??
j'ai tenté de comprendre le déroulement du script mais je ne vois pas cette limite.

Merci par avance de votre aide.

Re: Besoin d'aide pour un script windows

Posté : 21 juil. 2017 20:56
par barnabe0057
Bonjour,

Il n'y a pas de limitation, la variable s'incrémente de 1 à chaque fois que la chaine contient le mot "JOB".

Je ne comprend pas non plus pourquoi ça s'arrête, peut-être qu'un expert pourra nous éclairer.

Concernant l'affichage du nombre sur 3 digits, voilà la modification :

Code : Tout sélectionner

@echo off
Setlocal enableextensions enableDelayedExpansion

set source=sortie.txt
set destination=nouveau.txt

set /a nombre=0

for /f "tokens=*" %%A in (%source%) do (
    if "%%A"=="" (echo.>> %destination%) else (
    (echo %%A | findstr /i "JOB" > nul) && (call :action) || (echo %%A >> %destination%)
    )
)

notepad %destination%

Endlocal
exit

:action
set /a nombre+=1
if !nombre! LSS 100 (set nombre=0!nombre!)
if !nombre! LSS 10 (set nombre=0!nombre!)
echo JOB!nombre! >> %destination%
goto :eof

rem

Re: Besoin d'aide pour un script windows

Posté : 24 juil. 2017 11:26
par MichelB
Bonjour,

Je pense que la raison du blocage est dans ta réponse.
En fait tu dis "à chaque fois que la chaine contient le mot "JOB"." Donc il faudrait que mon fichier SOURCE contienne au moins les 40 000 lignes soit autant de fois que je souhaite avoir en Destination?
Est-ce exact ou peut-on simplifier ce scenario?

Merci de ton aide.

Re: Besoin d'aide pour un script windows

Posté : 25 juil. 2017 10:30
par barnabe0057
Bonjour,

Je ne suis pas sûr d'avoir compris ton dernier message, qu'entends-tu par "simplifier ce scénario" ?

Re: Besoin d'aide pour un script windows

Posté : 25 juil. 2017 18:55
par MichelB
Bonjour,

La question est doit-on avoir en Source un fichier contenant 40 000 fois le mot JOB pour qu'en sortie on puisse avoir les nombres de 1 à 40 000 ?
Quand je dis simplifier, cela veut dire, peut-on avoir un fichier Source avec uniquement une fois le mot job et le script boucle jusque 40 000?
j’espère que c'est plus clair ainsi.
merci de votre aide.

Re: Besoin d'aide pour un script windows

Posté : 25 juil. 2017 20:28
par barnabe0057
Concernant ta première question : dans l'état actuel du script, oui

Concernant ta deuxième question : oui tout est possible, mais dans ce cas je ne comprend pas ce que tu veux faire avec le numéro, tu veux numéroter chaque ligne ?