Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2764 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] Ajout date création au nom lors d'une copie

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Batch] Ajout date création au nom lors d'une copie

n°2383688
keido
Posté le 03-05-2021 à 23:32:29  profilanswer
 

Bonjour,
 
Je viens d'écumer la catégorie Scripts/Batch sans réussir à faire ce que je veux.
Le script est prévu de tourner sur un PC tournant sous Win XP, il me manque des fonctions style XCOPY ou FORFILES mais je pense que ce que je veux faire est réalisable.
 
J'ai un logiciel qui créé des fichiers "log_XXX.txt" (environ 1 par seconde), le problème c'est que le compte des fichiers repart du début plusieurs fois par jours.
Après déjà pas mal de recherches, j'ai réussi à trouver une solution pour éviter les pertes : un BAT qui démarre toutes les 20 min me permettant de faire une copie d'un fichier sur 50 du dossier de travail (ce qui me suffit).
Les sauvegardes se font dans un dossier par jour puis dans un sous dossier nommé avec l'heure a chaque sauvegarde dont voici le code :

Code :
  1. @echo off
  2. set datesav=%date:~6,4%-%date:~3,2%-%date:~0,2%
  3. set hh0=%time:~0,2%
  4. set /a hh1=%hh0%+100
  5. set hh=%hh1:~1,2%
  6. set mm=%time:~3,2%
  7. set heuresav=%hh%h%mm%
  8. set source="D:\travail"
  9. set target="E:\sauvegarde\%datesav%\%heuresav%"
  10. mkdir %target%
  11. FOR /F "delims=" %%I IN ('DIR %source%\*00.txt /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I
  12. FOR /F "delims=" %%I IN ('DIR %source%\*50.txt /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I


 
J'ai donc pas mal de doublons.
 
Pour exploiter ces fichiers, j'ai maintenant besoin de tout regrouper dans un seul dossier : "E:\sauvegarde\%datesav%\%datesav%_Export_journee".
Pour ce faire, je voudrais donc créer un deuxième BAT à exécuter après minuit qui remplirai ce rôle (ou intégrer cette fonction dans le code ci-dessus pour n'avoir plus qu'à copier le contenu des sous-dossiers après minuit sans avoir besoin de les renommer).
 
Pour éviter de perdre des données (entre deux sauvegardes le fichier "log_050.txt" créé à 7h00 est différent du fichier "log_050.txt" créé à 15h30), je souhaiterai ajouter un préfixe aux fichiers lors de la copie qui serait composé de [U]l'heure de création[/U] du fichier.
Les fichiers copiés ressembleraient donc à HHMM_log_001.txt ou encore mieux HHMMSS_log_001.txt si c'est possible.
 
Merci d'avance pour votre aide, je commence à tourner en rond dans mes recherches sans vraiment avancer...
 
 
----------------------------------------------------------------------------------------------------------
 
Mes recherches m'ont conduits vers les codes suivants, mais je n'arrive pas à les adapter pour mon besoin :
 
 
----------------------------------------------------------------------------------------------------------
 

Code :
  1. setlocal enabledelayedexpansion
  2. set $DateActuel=%date%
  3. echo Date actuel : %$dateActuel%
  4. echo.
  5. :test
  6. for %%a in (*.txt) do (set $DateFichier=%%~ta
  7.                     set $DateFichier=!$DateFichier:~4,10!
  8.                     echo Date de cr‚ation de %%~na : !$DateFichier!
  9.                     if %$DateActuel%==!$DateFichier! (echo STATUS : [NEW]) else (echo STATUS :[OLD])
  10.                     echo.)


Code :
  1. setlocal enabledelayedexpansion
  2. set source="%cd%"
  3. set target="%cd%\result\"
  4. set $datefichier=!$datefichier:~4,10!
  5. FOR /F "delims=" %%I IN ('DIR %source%\*.rpa /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo !$datefichier! %%I


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


Code :
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. REM Chemin complet du fichier
  5. set "fullpath=%~dpnx0"
  6.  
  7. REM Double les \
  8. set fullpath=!fullpath:\=\\!
  9.  
  10. REM Pour obtenir la date de modification remplacer CreationDate par LastModified
  11. for /F "usebackq Skip=1 tokens=*" %%d in (`wmic datafile where 'name^="!fullpath!"' get CreationDate`) do for /f "delims=" %%D in ("%%~d" ) do (
  12.     set date_tmp=%%~D
  13.     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!
  14. )
  15.  
  16. REM Affichage de la date au format AAAA_MM_JJ_HH_mm_ss_milliseconde
  17. echo !date_tmp!


Code :
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for %%a in (*.txt) do (
  4.  set nom=%%~na
  5.  for /F "tokens=1-10 delims=:/ " %%b in ('dir /T:C "%%a" ^| find "%%a"') do(
  6.       echo move "%%a" "!nom!-%%d-%%c-%%b-%%e%%f.rpa"
  7.     )
  8. )
  9. pause


Code :
  1. SETLOCAL
  2. set LOGFILE_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
  3. set LOGFILE_TIME=%TIME:~0,2%%TIME:~3,2%
  4. set LOGFILE=log-%LOGFILE_DATE%-%LOGFILE_TIME%
  5. copy a.txt  a%LOGFILE%.txt
  6. pause


Code :
  1. @echo off
  2.    dir /TC toto.txt | find "/"  > tmp.txt
  3.    call :PROCESS
  4.    echo la date de creation de toto.txt est %datetmp%
  5.    dir /TA toto.txt | find "/" > tmp.txt
  6.    call :PROCESS
  7.    echo la date de derniere lecture de toto.txt est %datetmp%
  8.    dir /TW toto.txt  | find "/" > tmp.txt
  9.    call :PROCESS
  10.    echo la date de derniere ecriture de toto.txt est %datetmp%
  11.    del tmp.txt
  12.    goto EXIT
  13.    :PROCESS
  14.    FOR /F "tokens=1-4 delims= " %%i in (tmp.txt) do set datetmp=%%i
  15.    :EXIT

mood
Publicité
Posté le 03-05-2021 à 23:32:29  profilanswer
 

n°2383851
keido
Posté le 04-05-2021 à 21:45:14  profilanswer
 

Solution sur le lien ci-dessous :


Message édité par keido le 09-05-2021 à 13:09:02
n°2384537
keido
Posté le 09-05-2021 à 13:07:11  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] Ajout date création au nom lors d'une copie

 

Sujets relatifs
Comment tester une liste d'URLs en batch ou PS avec log ?entrer date dans textbox avec préalable jj-mm-aaaa
[powershell] copie/màj de répertoiresAide Batch copy + rename (plusieurs dossiers a traiter en même temps)
Batch dont la modification ne fonctionne que si je copie le fichierfichier batch pour relier des fichiers videos
Création d'un QCMBatch windows avec accent
Création lien hypertexte pour vidage cache navigateur 
Plus de sujets relatifs à : [Batch] Ajout date création au nom lors d'une copie


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR