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

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Valentin
Batcheur occasionnel
Messages : 1
Enregistré le : 02 avr. 2017 13:05

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

Message 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
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

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

Message 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

 
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

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

Message 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.
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

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

Message 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
barnabe0057
SuperBatcher
Messages : 105
Enregistré le : 24 janv. 2017 13:41

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

Message 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
Répondre