Pb BATCH

Atome -  
cchristian Messages postés 928 Statut Membre -
Bonjour,

J'ai une chaine de caractere comme ceci qui correspond
a un nom de fichier:
ex
dep3_01072009.txt

j'aimerais supprimer la date 01072009 de la chaine de caractere avec un batch.

en clair j'aimerais supprimer 9 caracteres avant l'extension .txt pour avoir dep3.txt

merci de votre aide.....
Configuration: Windows XP Internet Explorer 6.0

11 réponses

  1. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Essaie cela:
     SETLOCAL ENABLEdelayedExpansion
     SETLOCAL ENABLEextensions
    echo off
    CLS
    set "test=dep3_01072009.txt"
    set  /A m = 5
    set  /A n = 8
    echo        !test:~%m%,%n%!
    
    goto :EOF
    0
  2. Atome
     
    merci pour at réponse mais ca ne fonctionne pas
    et en fait cela serait mieux si il ne tenait pas compte des caracteres
    juste les supprimer car quand la date change ca ne fonctionne plus

    en clair le mieux serait une commande qui supprimme un certain de nombre de caractere dans ma chaine avant l'extension car la taille est fixe meme si la date change
    ex:
    dep3_01072009.txt = dep3.txt
    et
    dep3_01082009.txt = dep3.txt

    une idée?
    0
  3. Utilisateur anonyme
     
    Salut,

    Ben tu renomme tout en dep3.txt ^^

    ren *.txt dep3.txt


    A+
    0
  4. Atome
     
    merci j'y avais pensé c que le soucis j'ai plusieurs fichiers comme cela

    dep3_01072009.txt

    dep4_01072009.txt

    dep5_01072009.txt
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    Salut, pour l'instand j'ai ceci :

    @echo off
    cls
    set NB=0
    set NB=3
    dir "%CD%\dep%NB%*.txt" /B > temp.txt
    set X=0
    set /p X=< temp.txt
    ren %X% dep%NB%.txt
    set /a NB=%NB% + 1
    del temp.txt
    


    C'est très rudimentaire, mais pour l'instand, c'est tout se que j'ai. Cela permet de renommer tout les fichiers qui commencent par "dep3"

    Si tu as des fichiers dep3, puis dep4, dep5...

    On peut faire une boucle avec un incrémentation (+1 à chaque fois)

    Quels sont les noms de tes fichiers ?
    Combien en as-tu ?

    Les nombres de "dep" se suivent-ils ?
    0
  7. Atome
     
    merci pour ton aide
    nombre de fichier 5

    c'est vraiment ce qu'il y a avant l'extension qui reste fixe et donc possible de supprimer
    mais bon comment faire lol

    dep 1 à 2_01072009.txt
    dep 3_01072009.txt
    dep 4_01072009.txt
    dep 4Neg_01072009.txt
    dep 5_01072009.txt

    n'y aurait il pas une commande ou fonction qui supprime un nombre x de caractere en batch a gauche du point de l'extension?
    0
  8. Utilisateur anonyme
     
    Salut, non je ne pense pas qu'il existe ce genre de commande ^^

    Si tu as juste 5 fichiers, on peut alors juste faire :

    ren "%CD%\dep 3_01072009.txt" dep3.txt


    Et pareil avec les autres...
    0
  9. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour
    Est-ce que cela correspond mieux à ton attente ?

    set "test=dep4 Neg_01072009.txt"
            FOR                %%F  IN  ("%test%") DO  (
                  SET               "nom_ext=%%~nxF"
                  SET               "ext=%%~xF"
                  echo    "Pour test  !ext!"   )
    rem Extraction de tous les c. de la chaine %test% sauf les %n% derniers.
    set "gener=%test:~0,-13%
    echo "Pour test : !gener!"
    set "caract=!gener!!ext!"
    echo "Pour test : !caract!"
    ......................
    --

    Résultats:

    "Pour test .txt"
    "Pour test : dep4 Neg"
    "Pour test : dep4 Neg.txt"
    Appuyez sur une touche pour continuer...
    0
  10. Atome
     
    merci de vos réponses ca m'aide

    cchristian ton code récupère bien
    la chaine ke je veux c'est a dire dep4 Neg dans gener
    je le vois dans la fenetre dos mais o final mon fichier n'est pas modifié.....

    dois je faire un rename avec?

    le soucis c vraiment qu'avec le batch je puisse modifier ces 5 fichiers
    dep1à2_010072009=dep1à2.txt
    .
    .
    .
    dep5_01072009=dep5.txt

    de plus le mois prochain cela sera

    dep1à2_01082009=dep1à2.txt

    .
    .
    dep5_01082009dep5.txt

    merci encore
    0
  11. cchristian Messages postés 928 Statut Membre 131
     
    Bonjour,

    Voici une nouvelle version, dis moi ce que tu en penses :

     SETLOCAL ENABLEdelayedExpansion
     SETLOCAL ENABLEextensions
    CLS
    echo off
    rem différents tests effectués:
    set "test=dep4 Neg_01072009.txt"
    rem dept4 Neg.txt
    set "test=dep1à2_010072009.txt"
    rem dept1à2.txt
    set "test=dep5_01072009"
    rem dept5.txt
    set "test=dep1à2_01082009"
    rem =dep1à2.txt
    set "test=dep5_01082009"
    rem dep5.txt
            FOR                %%F  IN  ("%test%") DO  (
                  SET               "nom_ext=%%~nxF"
                  SET               "ext=%%~xF"
                  echo    " pour test  !ext!"   )
    if "%ext%"         == "" (
        set "gener=%test:~0,-9%"
    rem Si pas d'extension on force .txt ?<==
        set "ext=.txt"
    ) else (
        set "gener=%test:~0,-13%"  )
    
    echo "Pour test : !gener!"
    set "file_caract=!gener!!ext!"
    echo "Pour test : !file_caract!"
    
    rem ICI TU PEUX FAIRE UN RENAME DE TON FICHIER AVEC file_caract

    0
  12. cchristian Messages postés 928 Statut Membre 131
     
    Bonsoir,

    Une dernière version qui tient compte du caractère "à" présent dans certains noms de fichier (discussion Accent dans un bat) :

    echo off
     SETLOCAL ENABLEdelayedExpansion
     SETLOCAL ENABLEextensions
    CLS
    echo off
    
    set "_chaineZ=dep4 Neg_01072009.txt"
    rem dept4 Neg.txt
    set "_chaineZ=dep1à2_01072009.txt"
    rem dept1à2.txt
    set "_chaineZ=dep5_01072009"
    rem dept5.txt
    set "_chaineZ=dep1à2_01082009"
    rem =dep1à2.txt
    set "_chaineZ=dep5_01082009"
    rem dep5.txt
    
    set "_chaineZ=dep4 Neg_01072009.txt"
     set "_chaineZ=dep1à2_01072009.txt"
    rem dept1a2.txt
    
    rem Boucle de recherche du caractère "à" . Si trouvé(s) remplacement
    rem par "a".
        SET /A   "_borne=128"
        SET      "test="
        FOR /L    %%I                     IN  (0,1,!_borne!)     DO  (
            IF    "!_chaineZ:~%%I,1!"      ==   "à"            (
                  SET  "test=!test!a"
          ) ELSE (
                  SET  "test=!test!!_chaineZ:~%%I,1!"     )   )
    rem Extraction de l'extension du nom du fichier à renommer:
        FOR       %%F                     IN  ("%test%")         DO  (
                  SET  "nom_ext=%%~nxF"
                  SET  "ext=%%~xF"                                 )
    rem              echo " pour test  !ext!"                       )
    rem Extraction des n derniers caractères de la chaine %test%.
        IF        "%ext%"                 ==  ""                     (
                  SET "gener=%test:~0,-9%"
    rem Si pas d'extension on force .txt ?
                  SET "ext=.txt"
      ) ELSE (
                  SET "gener=%test:~0,-13%"            )
    
    rem    echo "Pour test : !gener!"
    
    rem Reconstitution du nom du fichier sans la date et le "_".
        SET           "gener=!gener!!ext!"
    
        echo "Pour test : !gener!"
    
    rem ICI TU PEUX FAIRE UN RENAME DE TON FICHIER AVEC gener
    goto :EOF
    0