Page 1 sur 1

connaître la durée d'une copie ?

Posté : 02 avr. 2017 13:15
par Valentin
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

Re: connaître la durée d'une copie ?

Posté : 03 avr. 2017 02:05
par barnabe0057
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 :

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

 

Re: connaître la durée d'une copie ?

Posté : 04 avr. 2017 13:30
par barnabe0057
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.

Re: connaître la durée d'une copie ?

Posté : 04 avr. 2017 19:03
par barnabe0057
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

Re: connaître la durée d'une copie ?

Posté : 05 avr. 2017 10:15
par barnabe0057
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