Pb BATCH

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. 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
    1. 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

      1. 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
        1. 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...
          1. 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...
            1. 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?
              1. 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 ?
                1. merci j'y avais pensé c que le soucis j'ai plusieurs fichiers comme cela

                  dep3_01072009.txt

                  dep4_01072009.txt

                  dep5_01072009.txt
                  1. Salut,

                    Ben tu renomme tout en dep3.txt ^^

                    ren *.txt dep3.txt


                    A+
                    1. 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?
                      1. 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