IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Tronquer un nom de fichier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut Tronquer un nom de fichier
    Bonjour,

    Je cherche à faire un script pour tronquer un nom de fichier type, le problème est que le logiciel propriétaire (et plus maintenu à jour par l'editeur) ne gère plus l’incrémentation du quantième de l'année et l'ajoute tout les jours, donnant des fichiers à rallonge et empêchant le traitement:

    Fichier.dat.134 passera en fichier.dat.134.135 fichier.dat.134.135.136...

    Je voudrai donc faire un tronquage du nom en lui même, j'ai déjà trouvé pour tronquer dans un fichier, mais pas le nom.
    Ici il s'agirait de tronquer apres le ".dat" jusqu'au 4 derniers caractères ".quantieme" . Le nombre de caractère avant le .dat est toujours le même.

    Un rename est possible mais dans l'idée il me faut le moyen d'extraire le quantième de l'année à partir de la date, et là...Même soucis, pas de piste solide sur le sujet.

    Si une personne à déjà fait cela pour me donner une piste soit sur le tronquage du nom ou l'extraction du quantième je suis donc preneur.

    Merci

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    si tu connais la position de la valeur à tronquer utilise la substitution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    set test=123456789
    
    :::Les trois derniers caractères
    
    echo %test:~-3%
    
    :::les trois caractères du milieu
    
    echo %test:~3,-3%
    
    :::les trois premiers
    
    echo %test:~0,3%
    Amicalement

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut
    C'est surtout que les 3 derniers caractères changent tout les jours, principe du quantième.
    Dans le cadre d'une fin fixe ok pour la préciser comme ci dessous. Mais ça n'ira pas pour moi sur le fait qu'elle s’incrémente, donc change.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set test=prelevement_imp.dat.136.137
    :::Les trois derniers caractères
    echo %test:~-3%
    :::les trois premiers
    echo %test:~0,19%
    echo %test:~0,19%.%test:~-3%
    for %%x in (prelevement*.*) do rename "%%~fx" "%test:~0,19%.%test:~-3%"
    Sous linux j'aurai simplement fait un truc du genre find $path -name 'prelevement_imp.dat.*'Mais sous DOS je galère un peu plus dû à la restriction de mes connaissances

    Si ça peut aider, c'est le seul fichier dans cet emplacement, le reste du contenu est 3 repertoires, donc je ne sais pas si la récupération du nom fichier reste faisable sous DOS


    EDIT: J'en suis actuellement à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    @echo off
    
    ::récupération nom fichier
    set var=basename "C:\Users\e047\Desktop\test"
    for /r "C:\Users\e047\Desktop\test" %%i in (prelevement_imp.dat.*) do set VrTest=%%~nxi
    echo %VrTest%
    
    set test=%VrTest%
    :::Les trois derniers caractères
    echo %test:~-3%
    :::les trois premiers
    echo %test:~0,19%
    echo %test:~0,19%.%test:~-3%
    for /r "C:\Users\e047\Desktop\test" %%i in (*.*) do rename "%VrTest%" "%test:~0,19%.%test:~-3%"
    parcontre j'ai en retour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Users\e047\Desktop>totolalatoutou.bat
    prelevement_imp.dat.t.135.150
    150
    prelevement_imp.dat
    prelevement_imp.dat.150
    Le fichier spécifié est introuvable..
    hors j'ai bien qu'un seul fichier ne se nommant pas ainsi et bien présent.

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Tu peux tout faire dans la même boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    ::récupération nom fichier
    set var=basename "C:\Users\e047\Desktop\test"
    for /r "C:\Users\e047\Desktop\test" %%i in (prelevement_imp.dat.*) do (set VrTest=%%~nxi
    echo %VrTest%
    set test=%VrTest%
    echo %test:~-3%
    echo %test:~0,19%
    echo %test:~0,19%.%test:~-3%
    ren "C:\Users\e047\Desktop\test\%VrTest%" "C:\Users\e047\Desktop\test\%test:~0,19%.%test:~-3%")

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2012
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 97
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Tu peux tout faire dans la même boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @echo off
    
    ::récupération nom fichier
    set var=basename "C:\Users\e047\Desktop\test"
    for /r "C:\Users\e047\Desktop\test" %%i in (prelevement_imp.dat.*) do (set VrTest=%%~nxi
    echo %VrTest%
    set test=%VrTest%
    echo %test:~-3%
    echo %test:~0,19%
    echo %test:~0,19%.%test:~-3%
    ren "C:\Users\e047\Desktop\test\%VrTest%" "C:\Users\e047\Desktop\test\%test:~0,19%.%test:~-3%")
    Oui je me doute, j'avais juste fait en détaillé pour voir ce que ca donne pas à pas (mieux vaut quand on fait peut de batch windows comme moi)

    Parcontre ta commande de rename n'est pas reconnu par windows erreur de syntaxe
    Etant déjà dans le dossier de travail je suis revenu à ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ::récupération nom fichier
    set var=basename "C:\Users\e047\Desktop\test"
    for /r "C:\Users\e047\Desktop\test" %%i in (prel*.*) do (set VrTest=%%~nxi
    echo %VrTest%
    ::3 derniers caractères
    echo %VrTest:~-3%
    ::19 premiers caractères
    echo %VrTest:~0,19%
    ::nom final
    echo %VrTest:~0,19%.%VrTest:~-3%
    ren %VrTest% %VrTest:~0,19%.%VrTest:~-3%)
    Pour ne pas m’embêter j'ai juste reprit une seule variable et retirer %test% qui me servait juste pour différencier la partie récupération nom et substitution, et j'ai le même soucis que plus haut: Le fichier spécifié est introuvable.pourtant quand je fais echo du ren j'ai un retour correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    C:\Users\e047\Desktop>totolalatoutou.bat
    prelevement_imp.dat.t.135.136.140
    140
    prelevement_imp.dat
    prelevement_imp.dat.140
    ren prelevement_imp.dat.t.135.136.140 prelevement_imp.dat.140
    Après différent test c'est comme si il ne detectait pas de fichier alors qu'il voie bien le nom

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par aerane Voir le message
    ren prelevement_imp.dat.t.135.136.140 prelevement_imp.dat.140
    salut,

    mais y'a un t là sur ton nom de fichier, c'est normal ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28
  3. Réponses: 2
    Dernier message: 29/01/2004, 11h05
  4. Réponses: 4
    Dernier message: 10/10/2003, 18h04
  5. nom de fichier et variables d'environnement
    Par joebarthib dans le forum Langage
    Réponses: 2
    Dernier message: 18/07/2002, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo