Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] boucle for
Auteur Message
Répondre en citant
Message [R] boucle for 
J'aurais besoin de modifier certain élément dans un fichier txt, et la solution la plus approprié me semble être la boucle for.

Intèrieur du Fichier %w% AVANT le script que je désir :
31-F-138
12-3-158
13-3-131
14-F-101
20-A-97
22-A-92

Ce que je veux : Que toute les premiers nombre de CHAQUE lignes au dessus de %x% ( prenons x=17 ) soit augmenter de 1. (tout ceci ce situe dans un fichier )

Intèrieur du Fichier %w% APRES le script que je désir :
32-F-138
12-3-158
13-3-131
14-F-101
21-A-97
23-A-92

Alors je crois que c'est possible avec une boucle for. Mais j'ai beau faire un énorme bricolage avec des milliers de boucle for, je n'arrive à rien.
Et si déjà, vous arrivez à faire cette exploit, j'aimerais que si un nombre (le premier de la ligne) dépasse 140, il faut que sa ligne entière soit supprimer.
( info : Il ne faut en aucun cas s'occuper des autres nombres, il y a que ce qui l'y a avant le premier tiret qui m'intéresse. )

Chose à savoir : il peut y avoir une centaine de lignes comme celles-ci dans ce fichier mais elles auront toujours la même construction : xx-x-x
-------------------------------------

En plus + :
Alors je sais j'abuse, mais j'ai encore une dernière demande secondaire :

( Sa ressemble un peu à ma première demande ) Je voudrais que tout les NOM de fichier ( qui sont des chiffre ) soit augmenter de 1 à partir de %y%
Intèrieur du dossier des fichier AVANT :
22.data
32.data
19.data
34.data
43.data

Intèrieur du dossier des fichier APRES :
22
33
19
35
44

Mais en revanche je voudrais que si un seul fichier dépasserais 46 après "opération", je veux que "l'opération" soit annuler.


Voilà, j'en demande beaucoup mais inutile de réaliser ma deuxième "demande" si la première est impossible.

Si je n'ai pas été assez clair, vous pouvez me demander de tout reformuler.
Les plus coriace auront compris à quoi tout cela me servira Wink



Dernière édition par Bad-Code le Mar 15 Aoû 2017 - 13:41; édité 1 fois

______________________________________________________
We're just an accident. We're just bad code. - Root (POI)


La présentation de mon os en batch :

http://batch.xoo.it/t5844-Big-OS-en-batch.htm#p44047
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] boucle for 
Bonjour,

Voilà pour la première partie :

Code:
@echo off
setlocal enableextensions enableDelayedExpansion

set /a min=17
set /a max=140

echo. > fichier2.txt

for /f "usebackq tokens=1,* delims=-" %%A in ("fichier.txt") do (
set /a nb=%%A
if !nb! GTR %min% (set /a nb+=1)
if !nb! LEQ %max% (echo !nb!-%%B >> fichier2.txt)
)

endlocal
exit


Est-ce que ça te convient ?



Répondre en citant
Message [R] boucle for 
Voilà qui répond à toutes tes demandes :

Code:
@echo off
setlocal enableextensions enableDelayedExpansion

set dossier=chemin et nom de ton dossier
set temp=%dossier%\temp0123

set /a min=17
set /a max=140
set y=20

if not exist "%temp%" (mkdir "%temp%")

cd /d %dossier% || goto :eof

for /f "tokens=*" %%G in ('2^>nul dir /b /a-d "%dossier%"') do (
   echo. & echo ### %%~dpnxG
   set nom=%%~nG
   if !nom! GEQ %y% (set /a nom+=1)
   if !nom! LSS 46 (call :traitement "%%~dpnxG" "!nom!" "%%~xG")
)

move /Y "%temp%\*.*" "%cd%" > nul

echo. & pause
rmdir "%temp%"

endlocal
exit

:traitement

for /f "usebackq tokens=1,* delims=-" %%A in ("%~1") do (
   set /a nb=%%A
   if !nb! GTR %min% (set /a nb+=1)
   if !nb! LEQ %max% (echo !nb!-%%B >> "%temp%\%~2%~3")
)

if exist "%temp%\%~2%~3" (del /F /Q "%~1" > nul)

goto :eof

rem




Répondre en citant
Message [R] boucle for 
barnabe0057 a écrit:
Voilà qui répond à toutes tes demandes :

Code:
@echo off
setlocal enableextensions enableDelayedExpansion

set dossier=chemin et nom de ton dossier
set temp=%dossier%\temp0123

set /a min=17
set /a max=140
set y=20

if not exist "%temp%" (mkdir "%temp%")

cd /d %dossier% || goto :eof

for /f "tokens=*" %%G in ('2^>nul dir /b /a-d "%dossier%"') do (
   echo. & echo ### %%~dpnxG
   set nom=%%~nG
   if !nom! GEQ %y% (set /a nom+=1)
   if !nom! LSS 46 (call :traitement "%%~dpnxG" "!nom!" "%%~xG")
)

move /Y "%temp%\*.*" "%cd%" > nul

echo. & pause
rmdir "%temp%"

endlocal
exit

:traitement

for /f "usebackq tokens=1,* delims=-" %%A in ("%~1") do (
   set /a nb=%%A
   if !nb! GTR %min% (set /a nb+=1)
   if !nb! LEQ %max% (echo !nb!-%%B >> "%temp%\%~2%~3")
)

if exist "%temp%\%~2%~3" (del /F /Q "%~1" > nul)

goto :eof

rem


Merci infiniment, vraiment tu m'aides énormément, tu peux pas t'imaginer à quel point !

Faut vraiment que je m'améliore avec les boucle for. J'ai une dernière demande, si sa te dérange pas :

Je voudrai justement transformer le contenue de ces fichiers en commande batbox, et là aussi la bloucle for intervient; je m'explique.
Je veux que la boucle for fasse sa :

Interieur de fichier :
31-F-138
12-3-158
13-3-131
14-F-101
20-A-97
22-A-92

Rendue en ligne de commande batbox :
batbox /g 31 %x% /c 0x0F /a 138 /g 12 %x% /c 0x03 /a 158 /g 13 %x% /c 0x03 /a 131 /g 14 %x% /c 0x0F /a 101 /g 20 %x% /c 0x0A /a 97 /g 22 %x% /c 0x0F /a 92

Ce que je n'arrive pas à faire :
Mettre tout sa dans la MEME ligne batbox quelque soit le nombre de ligne que contient le fichier et ensuite l ligne batbox doit être exécuter directement après.
Si t'arrive à me faire, sa serai divin.

Voilà promis je m'arrête là !




______________________________________________________
We're just an accident. We're just bad code. - Root (POI)


La présentation de mon os en batch :

http://batch.xoo.it/t5844-Big-OS-en-batch.htm#p44047
Répondre en citant
Message [R] boucle for 
Est-ce que ça te convient ?

Code:
@echo off
setlocal enableextensions enableDelayedExpansion

set dossier=emplacement et nom du dossier
set temp=%dossier%\temp0123

set /a min=17
set /a max=140

set /a y=20
set /a x=17

if not exist "%temp%" (mkdir "%temp%")

cd /d %dossier% || goto :eof

for /f "tokens=*" %%G in ('2^>nul dir /b /a-d "%dossier%"') do (

   echo. & echo ### %%~dpnxG
   set nom=%%~nG
   if !nom! GEQ %y% (set /a nom+=1)
   if !nom! LSS 46 (call :traitement "%%~dpnxG" "!nom!" "%%~xG") else (set /a nom=!nom!-1)
   
   set arguments=

   for /f "usebackq tokens=1-3 delims=- " %%A in ("!nom!%%~xG") do (set arguments=!arguments!/g %%A %x% /c 0x0%%B /a %%C)
   
   echo batbox !arguments!

)

echo. & pause
rmdir "%temp%"

endlocal
exit

:traitement

for /f "usebackq tokens=1,* delims=-" %%A in ("%~1") do (

   set /a nb=%%A
   if !nb! GTR %min% (set /a nb+=1)
   if !nb! LEQ %max% (echo !nb!-%%B >> "%temp%\%~2%~3")

)

if exist "%temp%\%~2%~3" (del /F /Q "%~1" > nul)

move /Y "%temp%\*.*" "%cd%" > nul

goto :eof

rem


J'ai laissé le ECHO devant la commande BATBOX à des fins de tests, tu peux l'enlever.



Répondre en citant
Message [R] boucle for 
barnabe0057 a écrit:
Est-ce que ça te convient ?

Code:
@echo off
setlocal enableextensions enableDelayedExpansion

set dossier=emplacement et nom du dossier
set temp=%dossier%\temp0123

set /a min=17
set /a max=140

set /a y=20
set /a x=17

if not exist "%temp%" (mkdir "%temp%")

cd /d %dossier% || goto :eof

for /f "tokens=*" %%G in ('2^>nul dir /b /a-d "%dossier%"') do (

   echo. & echo ### %%~dpnxG
   set nom=%%~nG
   if !nom! GEQ %y% (set /a nom+=1)
   if !nom! LSS 46 (call :traitement "%%~dpnxG" "!nom!" "%%~xG") else (set /a nom=!nom!-1)
   
   set arguments=

   for /f "usebackq tokens=1-3 delims=- " %%A in ("!nom!%%~xG") do (set arguments=!arguments!/g %%A %x% /c 0x0%%B /a %%C)
   
   echo batbox !arguments!

)

echo. & pause
rmdir "%temp%"

endlocal
exit

:traitement

for /f "usebackq tokens=1,* delims=-" %%A in ("%~1") do (

   set /a nb=%%A
   if !nb! GTR %min% (set /a nb+=1)
   if !nb! LEQ %max% (echo !nb!-%%B >> "%temp%\%~2%~3")

)

if exist "%temp%\%~2%~3" (del /F /Q "%~1" > nul)

move /Y "%temp%\*.*" "%cd%" > nul

goto :eof

rem


J'ai laissé le ECHO devant la commande BATBOX à des fins de tests, tu peux l'enlever.


Parfait, Merci. C'est exactement ce que je voulais !




______________________________________________________
We're just an accident. We're just bad code. - Root (POI)


La présentation de mon os en batch :

http://batch.xoo.it/t5844-Big-OS-en-batch.htm#p44047
Message [R] boucle for 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch