Renommer un .txt avec son contenu en batch

Mael730 Messages postés 50 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis novice en progra et j'aurai besoins d'un petit coup de main:

Jai un fichier *.txt qui contient ceci:

Date/Time:;16/12/2009;10:57:05;;;;;;;Version: V 1.600.386;
Operator:;;

Battery ID:;A_S1_1El;;;Source:;SAFT;;;Battery type:;Li-ion;
Nominal voltage:;4.00;V;;Nominal current:;6.50;A;;Nominal capacity:;6.50;Ah;
Program:;Sim_1elm;
Circuit:;Cyc_P4-1;
Test section:;TS000002;;;Comment:;Comment.;;;Start of test:;08/12/2008;15:37:19;;;End of test:;08/12/2008;16:34:09;

J'aimerai que le fichier soit renommer avec ces informations:
-la date (ici 2009)
-battery ID (ici A_S1_1El)
-source (ici SAFT)
-Battery type (ici Li-ion)
-Nominal capacity (ici 6.50)

ce qui donnerai :
2009_A_S1_1El_SAFT_Li-ion_6.50.txt

J'avais pensé faire un findstr mais comme ces informations changent d'un fichier à l'autre cela ne marchera pas donc je ne sais pas trop comment m'y prendre!

des idées??

Merci d'avance

P.S: batch obligé!
Configuration: Windows XP
Firefox 3.5.5

8 réponses

  1. dvphamid Messages postés 17 Statut Membre 1
     
    et pour cette chaine de caract il y a tjr le même nombre de " ; "
    Battery ID:;A_S1_1El;;;Source:;SAFT;;;Battery type:;Li-ion;
    1
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    j'arrive.
    enlever le echo pour effectuer le rename
    C:> type f1.txt
    Date/Time:;16/12/2009;10:57:05;;;;;;;Version: V 1.600.386;
    Operator:;;
    
    Battery ID:;A_S1_1El;;;Source:;SAFT;;;Battery type:;Li-ion;
    Nominal voltage:;4.00;V;;Nominal current:;6.50;A;;Nominal capacity:;6.50;Ah;
    Program:;Sim_1elm;
    Circuit:;Cyc_P4-1;
    Test section:;TS000002;;;Comment:;Comment.;;;Start of test:;08/12/2008;15:37:19;;;End of test:;08/12
    /2008;16:34:09;
    
    C:> type aa.bat
    @echo off
    
    set FICHIER=f1.txt
    for /f "delims=/; tokens=5" %%a in ('findstr "Date" %FICHIER%') do (
    for /f "delims=; tokens=2,4,6" %%b in ('findstr "Battery" %FICHIER%') do (
    for /f "delims=; tokens=8" %%e in ('findstr "Nominal capacity" %FICHIER%') do (
    echo ren %FICHIER% %%a_%%b_%%c_%%d_%%e.txt
    )))
    
    C:> aa
    ren f1.txt 2009_A_S1_1El_SAFT_Li-ion_6.50.txt
    
    1
    1. Mael730 Messages postés 50 Statut Membre 1
       
      Merci dubcek, j'ai un autre problème:

      pour un autre fichier j'ai une variable avec un espace: %%b= A S1_1El
      donc pour le echo tout va bien le nom du fichier s'affiche nikel mais par contre la fonction rename ne prend pas les espaces apparemment==>la syntaxe de la commande est incorrect.

      tu as une astuce?
      0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Veux-tu le faire absolument en batch?

    As-tu excel sous la main?
    0
  4. Mael730 Messages postés 50 Statut Membre 1
     
    Oui absolument en batch!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mael730 Messages postés 50 Statut Membre 1
     
    Oui il y a toujours le même nombre de ";"
    0
  7. Mael730 Messages postés 50 Statut Membre 1
     
    Je pense qu'il faut utiliser delims et token dans une boucle mais le problème c'est que les lignes sont toutes différentes!

    dubcek t'es dans le coin??
    0
  8. Mael730 Messages postés 50 Statut Membre 1
     
    Tu peut me dire aussi ce qui ne vas pas la dessous? Il faudrait que le script balaye tout le dossier à la recherche de fichiers .txt et qu'il effectue l'opération sur tout ces fichiers:

    @echo off

    for /f "delims=" %%x in ('dir /b *.txt') do (

    set FICHIER=%%x

    for /f "delims=/; tokens=5" %%a in ('findstr "Date" %FICHIER%') do (
    for /f "delims=; tokens=2,4,6" %%b in ('findstr "Battery" %FICHIER%') do (
    for /f "delims=; tokens=8" %%e in ('findstr "Nominal capacity" %FICHIER%') do (

    echo ren %%x %%a_%%b_%%c_%%d_%%e.txt

    ))))

    merci d'avance
    0
  9. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    ajouter setlocal enableDelayedExpansion et remplacer % par ! pour la variable FICHIER
    @echo off
    
    setlocal enableDelayedExpansion
    for /f "delims=" %%x in ('dir /b *.txt') do (
    
    set FICHIER=%%x
    
    for /f "delims=/; tokens=5" %%a in ('findstr "Date" !FICHIER!') do (
    for /f "delims=; tokens=2,4,6" %%b in ('findstr "Battery" !FICHIER!') do (
    for /f "delims=; tokens=8" %%e in ('findstr "Nominal capacity" !FICHIER!') do (
    
    echo ren !FICHIER! %%a_%%b_%%c_%%d_%%e.txt
    
    )))) 
    0