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 :

Renommer plusieurs fichiers avec timestamp unique


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2020
    Messages : 30
    Par défaut Renommer plusieurs fichiers avec timestamp unique
    Bonjour à tous,

    J'ai un dossier qui est alimenté tous les jours par plusieurs fichiers .XML.
    J'ai besoin via un batch de renommer tous ces fichiers avec la date et l'heure seulement. Je ne veux pas récupérer l'ancien nom.
    Du coup je suis confronté à un problème de doublon quand il y a plusieurs fichiers... Ca fonctionne pour le 1er mais pas pour les autres.
    J'ai essayé d'ajouter les centièmes de secondes mais cela ne résout pas le problème : Pour le script le timestamp reste le même au centième de seconde près.

    Une idée de comment je pourrais faire?

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Bonjour,

    C'est parce qu'il faut utiliser l'expansion retardée des variables (setlocal enabledelayedexpansion), sinon la date et l'heure seront évaluées une seule fois au lancement du script.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2020
    Messages : 30
    Par défaut
    Bonjour Barnabe,

    Finalement j'ai changé de méthode et je cherche à renommer par la date/heure de création du fichier et pas l'heure à laquelle le script est exécuté.
    Voici mon script qui fonctionne. Il copie les fichiers *.xml présents dans le dossier C:\test1 vers le dossier C:\test2 en les renommant

    Mais j'ai encore 2 problème:
    - Cela ne me renomme pas le fichier avec les secondes : le renommage doit se faire au format YYYYMMDDHHMMSS
    - Cela ne fonctionne pas si j'ai un espace dans le nom original du fichier à renommer

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    @echo off
    setlocal enabledelayedexpansion
     
    set ORIGIN-FOLDER=C:\test1
    set BACKUP-FOLDER=C:\test2
    set FICHIERS=*.xml
     
    set CreateFolder=NO
    mkdir %BACKUP-FOLDER%
    if %errorlevel%==0 set CreateFolder=YES
     
    for /f "tokens=*" %%f in ('dir %ORIGIN-FOLDER%\*%FICHIERS%* /b /s') do (
       for /f "tokens=1,2" %%x in ('echo %%~tf') do (
          set DATE=%%x
          set DATE=!DATE:/=!
          set HEURE=%%y
          set HEURE=!HEURE::=!
          copy %%~f %BACKUP-FOLDER%\!DATE!!HEURE!.pdf
         set /a Count+=1
          )
        )
     
    :: petite condition qui met des "s" si y'en a plusieurs :)
    if %Count% GTR 1 ( set "s=s" ) else ( set "s=" )
     
    cls
    if %CreateFolder%==YES echo R‚pertoire %BACKUP-FOLDER% cr‚‚
    echo %Count% fichier%s% copi‚%s% dans le r‚pertoire %BACKUP-FOLDER%
    pause>nul

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    - Cela ne fonctionne pas si j'ai un espace dans le nom original du fichier à renommer
    ==>> essaie de rajouter des double-quotes à la ligne 18 :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    copy "%%~f" "%BACKUP-FOLDER%\!DATE!!HEURE!.pdf"

    - Cela ne me renomme pas le fichier avec les secondes :
    ==>> la date et l'heure de création n'incluent pas cette information, il n'y a donc pas de solution possible

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Les millisecondes sont accessible via le wmi

    exemple :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    setlocal enabledelayedexpansion
     
    REM Chemin complet du fichier
    set "fullpath=%~dpnx0"
     
    REM Double les \
    set fullpath=!fullpath:\=\\!
     
    REM Pour obtenir la date de modification remplacer CreationDate par LastModified
    for /F "usebackq Skip=1 tokens=*" %%d in (`wmic datafile where 'name^="!fullpath!"' get CreationDate`) do for /f "delims=" %%D in ("%%~d") do (
    	set date_tmp=%%~D
    	set date_tmp=!date_tmp:~,4!_!date_tmp:~4,2!_!date_tmp:~6,2!_!date_tmp:~8,2!_!date_tmp:~10,2!_!date_tmp:~12,2!_!date_tmp:~15,4!
    )
     
    REM Affichage de la date au format AAAA_MM_JJ_HH_mm_ss_milliseconde
    echo !date_tmp!
     
    pause

Discussions similaires

  1. [AC-2007] Renommer plusieurs fichiers avec date
    Par kiki51500 dans le forum VBA Access
    Réponses: 0
    Dernier message: 04/12/2015, 14h55
  2. Réponses: 6
    Dernier message: 29/02/2012, 08h00
  3. [batch] renommer un fichier avec la date
    Par arcane dans le forum Windows
    Réponses: 3
    Dernier message: 13/05/2005, 14h32
  4. Renommer un fichier avec SmartUpload
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 21/12/2004, 15h53
  5. Zipper plusieurs fichiers avec Abbrevia TP
    Par alex4 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 17/11/2004, 08h00

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