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

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Keido
Batcheur occasionnel
Messages : 3
Enregistré le : 04 mai 2021 00:20

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

Message par Keido »

Bonjour,

Je viens d'écumer le net 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 : Tout sélectionner

@echo off

set datesav=%date:~6,4%-%date:~3,2%-%date:~0,2%

set hh0=%time:~0,2%
set /a hh1=%hh0%+100
set hh=%hh1:~1,2%

set mm=%time:~3,2%

set heuresav=%hh%h%mm%


set source="D:\travail"
set target="E:\sauvegarde\%datesav%\%heuresav%"

mkdir %target%

FOR /F "delims=" %%I IN ('DIR %source%\*00.txt /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo %%I
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 l'heure de création 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 : Tout sélectionner

setlocal enabledelayedexpansion
set $DateActuel=%date%

echo Date actuel : %$dateActuel%
echo.

:test
for %%a in (*.txt) do (set $DateFichier=%%~ta
                     set $DateFichier=!$DateFichier:~4,10!
                     echo Date de cr‚ation de %%~na : !$DateFichier!
                     if %$DateActuel%==!$DateFichier! (echo STATUS : [NEW]) else (echo STATUS :[OLD])
                     echo.)

Code : Tout sélectionner

setlocal enabledelayedexpansion

set source="%cd%"
set target="%cd%\result\"
set $datefichier=!$datefichier:~4,10!

FOR /F "delims=" %%I IN ('DIR %source%\*.rpa /A:-D /O:-D /B') DO COPY %source%\"%%I" %target% & echo !$datefichier! %%I

Code : Tout sélectionner

@echo off
setlocal enabledelayedexpansion
 
set ORIGIN-FOLDER=C:\Users\user\Desktop\rename\1
set BACKUP-FOLDER=C:\Users\user\Desktop\rename\1\result
set FICHIERS=*.txt
 
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!
     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

Code : Tout sélectionner

@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!

Code : Tout sélectionner

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

Code : Tout sélectionner

SETLOCAL
set LOGFILE_DATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set LOGFILE_TIME=%TIME:~0,2%%TIME:~3,2%
set LOGFILE=log-%LOGFILE_DATE%-%LOGFILE_TIME%

copy a.txt  a%LOGFILE%.txt
pause

Code : Tout sélectionner

@echo off
    dir /TC toto.txt | find "/"  > tmp.txt
    call :PROCESS
    echo la date de creation de toto.txt est %datetmp%
    dir /TA toto.txt | find "/" > tmp.txt
    call :PROCESS
    echo la date de derniere lecture de toto.txt est %datetmp%
    dir /TW toto.txt  | find "/" > tmp.txt
    call :PROCESS
    echo la date de derniere ecriture de toto.txt est %datetmp%
    del tmp.txt
    goto EXIT
    :PROCESS
    FOR /F "tokens=1-4 delims= " %%i in (tmp.txt) do set datetmp=%%i
    :EXIT
Keido
Batcheur occasionnel
Messages : 3
Enregistré le : 04 mai 2021 00:20

Re: Ajout date création au nom lors d'une copie

Message par Keido »

Code : Tout sélectionner

@title Extraction des LOGs en cours ... Merci de patienter.
@echo off
 
set datesav=%date:~6,4%-%date:~3,2%-%date:~0,2%
set source=D:\production
set target=E:\sauvegarde\%datesav%
 
mkdir %target%
 
FOR /F "delims=;" %%a IN ('DIR %source%\*00.txt /A:-D /O:-D /B') DO (
dir /TC %%a | find "/"  > tmp.txt
call :MEF
)
 
FOR /F "delims=;" %%a IN ('DIR %source%\*50.txt /A:-D /O:-D /B') DO (
dir /TC %%a | find "/"  > tmp.txt
call :MEF
)
 
del tmp.txt
 
EXIT
 
:MEF
FOR /F "tokens=1-4 delims= " %%a in (tmp.txt) do (
set datetmp=%%b
set fichier=%%d
)
set timefile=%datetmp:~0,2%%datetmp:~3,2%
COPY %source%\%fichier% %target%\%timefile%-%fichier%

Keido
Batcheur occasionnel
Messages : 3
Enregistré le : 04 mai 2021 00:20

Re: Ajout date création au nom lors d'une copie

Message par Keido »

Répondre