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. 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
    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. Salut,

        Ben tu renomme tout en dep3.txt ^^

        ren *.txt dep3.txt


        A+
        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, 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 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, 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. 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. 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,

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