Pb BATCH

Atome -  
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   -
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.....

11 réponses

cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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
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
Utilisateur anonyme
 
Salut,

Ben tu renomme tout en dep3.txt ^^

ren *.txt dep3.txt


A+
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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
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
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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
cchristian Messages postés 921 Date d'inscription   Statut Membre Dernière intervention   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