Probleme avec mon fichier batch

Probleme avec mon fichier batch - Shell/Batch - Programmation

Marsh Posté le 20-01-2009 à 12:52:36    

Voila j'essaye de faire un fichier batch, qui va chercher dans un repertoire les fichiers qui contiennent une valeur, ensuite je voudrais modifier dans chaqu'un des fichiers la valeur, puis enregistrer ce fichier sous le nom de l'ancien fichier
 
@echo off
setlocal EnableDelayedExpansion
 
for /f "tokens=*" %%z in ('type *.raw^|findstr /l "LE LUNDI 06 OCTOBRE 2008"') do (
set ligne=%%a echo !ligne:LE LUNDI 06 OCTOBRE 2008=LE MARDI 12 JANVIER 2008!)>>test.txt
 
del %%z.raw
ren test.txt %%z.raw
 
%%z etant la variable qui contient le nom du fichier
%%a etant la variable de la valeur cherchée
 
Merci pour vos éclaircissement

Reply

Marsh Posté le 20-01-2009 à 12:52:36   

Reply

Marsh Posté le 21-01-2009 à 15:23:23    

salut,
 
il y a plus simple avec l'utilitaire switch.exe

Reply

Marsh Posté le 22-01-2009 à 01:21:14    

Code :
  1. ::pour chaque fichier .raw
  2. for /f "delims=" %%a in ('dir /b *.raw') do (
  3. type "%%a" | findstr /i "le lundi 06 octobre 2008" > NUL
  4. ::s'il y a la chaine qu'on veut
  5. if errorlevel 0 for /f "delims=" %%b in ('type "%%a"') do (
  6. echo "%%b" | findstr /i "le lundi 06 octobre 2008" > NUL
  7. ::alors on ecrit tout le contenu du fichier dans un autre, et on remplace la chaine qu'on veut
  8. if errorlevel 1 (echo %%b >> "%%a.tmp" ) else (echo LE MARDI 12 JANVIER 2008 >> "%%a.tmp" )
  9. )
  10. )


Message édité par blastkiller le 22-01-2009 à 01:23:48
Reply

Marsh Posté le 22-01-2009 à 07:29:21    

Salut,
 
 
avant tout on dit merci Blastkiller pour ton idée et ton code   :hello:  ..ça nous manque des gens compétants comme vous.  :) ...pour votre code: le seul bug c'est que la chaîne à remplacer sera traiter avec toute la ligne la contenant...(toute la ligne sera remplacée)..ton code sera parfait pour un traitement vertical des données, mais pour le traitement horizontal malheureusement ça fonctionnera avec ce bug..en esperant que vous corriger cette lacune..
 
pour ma part j'opte pour l'utilitaire switch.exe...eh oui, parfois ça simplifie la vie:

Set oldString=LE LUNDI 06 OCTOBRE 2008
Set newString=LE MARDI 12 JANVIER 2008
 
For /f "delims=" %%? In ('FindStr /M /S /C:"%oldString%" "*.txt"') do (
      Switch "%%?" "%oldString%" "%newString%"
)


Message édité par i'm_here le 22-01-2009 à 08:36:43
Reply

Marsh Posté le 22-01-2009 à 08:00:34    

Code :
  1. ::pour chaque fichier .raw
  2. for /f "delims=" %%a in ('dir /b *.raw') do call :cmd "%%a"
  3. pause
  4. exit
  5. :cmd
  6. set fichier=%~1
  7. type "%fichier%" | findstr /i "le lundi 06 octobre 2008" > NUL
  8. ::s'il y a la chaine qu'on veut dans le fichier alors on traite le fichier
  9. if errorlevel 0 for /f "delims=" %%b in ('type "%fichier%"') do call :cmd1 "%%b"
  10. goto :eof
  11. :cmd1
  12. set ligne=%~1
  13. set ligne=%ligne:LE LUNDI 06 OCTOBRE 2008=LE MARDI 12 JANVIER 2008%
  14. echo %ligne% >> %fichier%.tmp

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed