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