Bonjour tout le monde,
voilà, j'ai fait un petit batch de sauvegarde de fichiers et à chaque lancement, dans un fichier "historique.txt", je mets la date, la source et la destination des fichiers traités et le nombres d'octets copiés.
Je voudrais aussi indiquer le temps d'exécution de la copie. Existe t-il un commande pour faire ça ou est-il possible de calculer le temps écoulé ?
Si quelqu'un pouvait m'éclairer à ce sujet ce serait sympa.
Merci, Valentin
connaître la durée d'une copie ?
Modérateur : WIN32-[GG]
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: connaître la durée d'une copie ?
Bonjour,
C'est peut-être faisable avec la commande robocopy, sinon je t'ai créé une fonction pour copier un dossier et pour récupérer la durée :
C'est peut-être faisable avec la commande robocopy, sinon je t'ai créé une fonction pour copier un dossier et pour récupérer la durée :
Code : Tout sélectionner
@echo off
Mode con cols=160 lines=25
Setlocal enableextensions enabledelayedexpansion
set rapport=%USERPROFILE%\Desktop\historique.txt
if exist "%rapport%" del /F "%rapport%"
rem
rem
rem
:debut
set source=
set destination=
cls
set /p source="dossier source ? "
if "%source%A" == "A" goto :debut
if not exist "%source%" goto :debut
set /p destination="dossier de destination ? "
if "%destination%A" == "A" goto :debut
if not exist "%destination%" goto :debut
timeout /t 2
call :copie
echo. & pause
goto :debut
Endlocal
exit
:copie
set /a before=!TIME:~0,2!*3600+!TIME:~3,2!*60+!TIME:~6,2!
xcopy /E /Y "%source%" "%destination%"
set /a after=!TIME:~0,2!*3600+!TIME:~3,2!*60+!TIME:~6,2!
set /a duree=!after!-!before!
if !duree! GEQ 60 (
set /a min=!duree!/60
set /a sec=!duree!-!min!*60
echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [duree: !min!min !sec!sec] >> "%rapport%"
) else (echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [duree: !sec!sec] >> "%rapport%")
goto :eof
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: connaître la durée d'une copie ?
Bonjour,
Concernant ta première remarque je n'étais pas conscient du problème.
Merci pour tes corrections, je te souhaite une bonne journée.
Concernant ta première remarque je n'étais pas conscient du problème.
Merci pour tes corrections, je te souhaite une bonne journée.
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: connaître la durée d'une copie ?
Voilà une nouvelle version avec l'ajout de la taille en octets :
Code : Tout sélectionner
@echo off
chcp 1252 > nul
Mode con cols=160 lines=25
Setlocal enableextensions enabledelayedexpansion
set rapport=%USERPROFILE%\Desktop\historique.txt
if exist "%rapport%" del /F "%rapport%"
rem
rem
rem
:debut
set source=
set destination=
cls
set /p source="dossier source ? "
if "%source%A" == "A" goto :debut
if not exist "%source%" goto :debut
set /p destination="dossier de destination ? "
if "%destination%A" == "A" goto :debut
if not exist "%destination%" goto :debut
timeout /t 2
call :copie
echo. & pause
goto :debut
Endlocal
exit
rem
rem
rem
:copie
for /F "tokens=3 delims= " %%a in ('dir /S "%source%" ^| findstr /E /L "octets"') do (set "size=%%a octets")
set size=!size:ÿ= !
set /a before=!TIME:~0,1!*36000+!TIME:~1,1!*3600+!TIME:~3,1!*600+!TIME:~4,1!*60+!TIME:~6,1!*10+!TIME:~7,1!
xcopy /E /Y "%source%" "%destination%"
set /a after=!TIME:~0,1!*36000+!TIME:~1,1!*3600+!TIME:~3,1!*600+!TIME:~4,1!*60+!TIME:~6,1!*10+!TIME:~7,1!
if !after! LSS !before! set /a after+=86400
set /a duree=!after!-!before!
if !duree! GEQ 60 (
set /a min=!duree!/60
set /a sec=!duree!-!min!*60
echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [taille: !size!] [duree: !min!min !sec!sec] >> "%rapport%"
) else (echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [taille: !size!] [duree: !duree!sec] >> "%rapport%")
goto :eof
-
- SuperBatcher
- Messages : 105
- Enregistré le : 24 janv. 2017 13:41
Re: connaître la durée d'une copie ?
oui un petit problème de découpage de %TIME%, j'ai déjà re-corrigé ça hier soir mais j'ai oublié de vous en faire profiter
Code : Tout sélectionner
@echo off
Mode con cols=160 lines=25
Setlocal enableextensions enabledelayedexpansion
set rapport=%USERPROFILE%\Desktop\historique.txt
if exist "%rapport%" del /F "%rapport%"
rem
rem
rem
:debut
set source=
set destination=
cls
set /p source="dossier source ? "
if "%source%A" == "A" goto :debut
if not exist "%source%" goto :debut
set /p destination="dossier de destination ? "
if "%destination%A" == "A" goto :debut
if not exist "%destination%" goto :debut
timeout /t 2
call :copie
echo. & pause
goto :debut
Endlocal
exit
rem
rem
rem
:copie
for /F "tokens=3 delims= " %%Z in ('dir /S "%source%" ^| findstr /E /L "octets"') do (set size=%%Z)
for /F "tokens=1,2,3,4 delims=ÿ" %%a in ("%size%") do (
if not "A%%a"=="A" set "total=%%a octets"
if not "A%%b"=="A" set "total=%%a Ko"
if not "A%%c"=="A" set "total=%%a Mo"
if not "A%%d"=="A" set "total=%%a%%b Mo"
)
set /a before=!TIME:~0,2!*3600+!TIME:~3,1!*600+!TIME:~4,1!*60+!TIME:~6,1!*10+!TIME:~7,1!
xcopy /E /Y "%source%" "%destination%"
set /a after=!TIME:~0,2!*3600+!TIME:~3,1!*600+!TIME:~4,1!*60+!TIME:~6,1!*10+!TIME:~7,1!
if !after! LSS !before! set /a after+=86400
set /a duree=!after!-!before!
if !duree! GEQ 60 (
set /a min=!duree!/60
set /a sec=!duree!-!min!*60
echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [taille: !total!] [duree: !min!min !sec!sec] >> "%rapport%"
) else (echo [%DATE%] [ %source% ] ==^>^> [ %destination% ] [taille: !total!] [duree: !duree!sec] >> "%rapport%")
goto :eof