Zwei oder eine Datei in Datum- und Uhrzeit vergleichen oder, wie lange dauerte der Datei-Transfer bzw. der Schreibprozeß?
Manchmal ist es wichtig zu wissen, wie lange ein bestimmter Prozeß gedauert hat.
Die Umwandlung von einer Datei in eine andere oder der reine Schreibprozeß.
Der Dir-Befehl liefert mit /tc den Beginn und mit /tw den letzten Schreibzugriff einer Datei.
Dies nutzt der folgende Skript aus, um daraus die Dauer in min oder in der Form 00:00 h darzustellen.
Dass ich dabei für den /tw-Teil zwei Varianten (Zeile 39-43 bzw. 50-57) vorschlage, soll nur die verschiedenen Möglichkeiten darstellen. Welche davon Euch gefällt, müsst Ihr selbst entscheiden. Im Ergebnis sind beide gleich.
Die kürzere Variante haben wir @rubberman zu danken. Danke für die Mithilfe.
Ich hoffe, die Variablen erklären sich selbst?
Media1 oder ..2 sind mit der Endung einzugeben. Die Ableitung exc und oxc werden
durch den Skript abgeleitet. Anders als bei Übergaben durch eine andere Batch sind durch die set /p-Abfragen keine "Anführungszeichen" notwendig. Sie schaden aber auch nicht.
ATxx: ZeitWerte der 1.Datei, BTxx: ZeitWerte der 2.Datei, DTxx: Zeit-Differenzen, xxGm Gesamtzeit in min
xxdd: Tag, xxmm Monat, xxjj Jahr, xxSJ Schaltjahr (no), xx1h Stunde, xx1m Minute
Falls noch Fragen sind - immer her damit.
Die Pause am :Ende sollte vielleicht bei aktiver Verwendung entfernt werden,
ausser, Ihr wollt sie so im Explorer verwenden.
Meine Variante wäre diese:
Der Befehl vor dem ":Ende" bewirkt den Erhalt der Variablen %Dauer% und %DTGm% für die weitere Verwendung.
Alle anderen Variablen sind durch den Lokalschluss endlocal hinweggefegt.
Den Eingangsbereich (Zeilen 1-20) verwende ich nicht, da ich diesen Dateien-Check innerhalb einer anderen Batch nutze.
Doch dazu ein andermal mehr.
Viel Spaß beim Testen. Fehlerhinweise und Verbesserungsvorschläge sind wie immer gern gesehen.
max5moritz
Die Umwandlung von einer Datei in eine andere oder der reine Schreibprozeß.
Der Dir-Befehl liefert mit /tc den Beginn und mit /tw den letzten Schreibzugriff einer Datei.
Dies nutzt der folgende Skript aus, um daraus die Dauer in min oder in der Form 00:00 h darzustellen.
Dass ich dabei für den /tw-Teil zwei Varianten (Zeile 39-43 bzw. 50-57) vorschlage, soll nur die verschiedenen Möglichkeiten darstellen. Welche davon Euch gefällt, müsst Ihr selbst entscheiden. Im Ergebnis sind beide gleich.
Die kürzere Variante haben wir @rubberman zu danken. Danke für die Mithilfe.
Ich hoffe, die Variablen erklären sich selbst?
Media1 oder ..2 sind mit der Endung einzugeben. Die Ableitung exc und oxc werden
durch den Skript abgeleitet. Anders als bei Übergaben durch eine andere Batch sind durch die set /p-Abfragen keine "Anführungszeichen" notwendig. Sie schaden aber auch nicht.
ATxx: ZeitWerte der 1.Datei, BTxx: ZeitWerte der 2.Datei, DTxx: Zeit-Differenzen, xxGm Gesamtzeit in min
xxdd: Tag, xxmm Monat, xxjj Jahr, xxSJ Schaltjahr (no), xx1h Stunde, xx1m Minute
Falls noch Fragen sind - immer her damit.
@echo off&setlocal enabledelayedexpansion
set "info=no"
:Anfang
FOR /f "delims==" %%i IN ('set Media') DO @set "%%i="
cls & if not "%info%"=="no" %info%
set "info=cls&echo.&echo Bitte einen Dateinamen eingeben."
set "inf1=cls&echo.&echo Die Datei ist nicht vorhanden.&echo."
set "inf2= und&echo die Datei-Endung nicht vergessen.&echo."
if "%~1"=="" set /P Media1= Welche 1. Datei?
if not "%~1"=="" set "Media1=%~1"
if "%Media1%"=="" goto :Anfang
if not exist "%Media1%" set "info=%inf1%"& goto :Anfang
if "%~2"=="" set /P Media2= Welche 2. Datei?
if not "%~2"=="" set "Media2=%~2"
if "%Media2%"=="" if not "%Media1%"=="" set "Media2=%Media1%"
if "%Media1:~-4,1%"=="." set "EXC=%Media1:~-3,3%"
if "%Media2:~-4,1%"=="." set "OXC=%Media2:~-3,3%"
if "%EXC%"=="" set "info=%info:~0,-1%%inf2%"& goto :Anfang
if "%OXC%"=="" set "info=%info:~0,-1%%inf2%"& goto :Anfang
cls & echo.
FOR /f "tokens=1-5 delims=.: " %%i IN ('dir /tc "%Media1%"^|find /i ".%exc%"') DO @(
set /a "ATdd = 100%%i, ATdd %%= 100, ATmm = 100%%j, ATmm %%= 100, AT1h = 100%%l, AT1h %%= 100, AT1m = 100%%m, AT1m %%= 100"
set /A ATjj=%%k/4*4
if not !ATjj! equ %%k set "ATSJ=no"
)
set /A ATGm=(!AT1h!*60)+!AT1m!
echo ATdd: --%ATdd%--&echo ATmm: --%ATmm%--&echo ATSJ: --%ATSJ%--&echo AT1h: --%AT1h%--&echo AT1m: --%AT1m%--
echo --------------
echo ATGm: %ATGm% min
echo ==============
set /P next= Variante 1 oder 2? & echo.
if "%next%"=="" set "next=1"
goto :next%next%
:next1
echo next-1
FOR /f "tokens=1-5 delims=.: " %%i IN ('dir /tw "%Media2%"^|find /i ".%oxc%"') DO @(
set /a "BTdd = 100%%i, BTdd %%= 100, BTmm = 100%%j, BTmm %%= 100, BT1h = 100%%l, BT1h %%= 100, BT1m = 100%%m, BT1m %%= 100"
set /A BTjj=%%k/4*4
if not !BTjj! equ %%k set "BTSJ=no"
)
set /A next=%next%+2
goto :next%next%
:next2
echo next-2
For /F "tokens=1-5 Delims=.: " %%i in ('dir /tw "%Media2%"^|Find /i ".%oxc%"') Do @(
set /A BTdd=1%%i-100
set /A BTmm=1%%j-100
set /A BTjj=%%k/4*4
set /A BT1h=1%%l-100
set /A BT1m=1%%m-100
if not !BTjj! equ %%k set "BTSJ=no"
)
:next3
set /A BTGm=(%BT1h%*60)+%BT1m%
echo BTdd: --%BTdd%--&echo BTmm: --%BTmm%--&echo BTSJ: --%BTSJ%--&echo BT1h: --%BT1h%--&echo BT1m: --%BT1m%--
echo --------------
echo BTGm: %BTGm% min
if %ATmm% lss %BTmm% @(
FOR %%i IN (4,6,9,11) DO @if %ATmm% equ %%i set A1dd=30
FOR %%i IN (1,3,5,7,8,10,12) DO @if %ATmm% equ %%i set A1dd=31
if %ATmm% equ 2 if "%ATSJ%"=="no" (set "A1dd=28") ELSE set "A1dd=29"
set /A DTdd=%BTdd%+!A1dd!-%ATdd%
) ELSE (
if %ATmm% gtr %BTmm% (set /A DTdd=%BTdd%+31-%ATdd%
) ELSE set /A DTdd=%BTdd%-%ATdd%
)
if "%DTdd%" equ "0" (set /A DTGm=%BTGm%-%ATGm%) ELSE set /A DTGm=(DTdd*24*60)+%BTGm%-%ATGm%
echo.
echo Dauer: %DTGm% min
echo ===================================
if %DTGm% LSS 60 goto :tim1
set /A STD=%DTGm%/60
set /A MIN=%DTGm%-(!STD!*60)
set /A MIN=1%min%-100
:tim1
if %DTGm% LSS 60 (if "%DTGm%" equ "0" (set "Dauer=keine Minute") ELSE set "Dauer=%DTGm% min"
) ELSE set "Dauer=%std%:%min% h"
if "%Media1%"=="%Media2%" (set "Dauer=Der Prozeá hat %Dauer% gedauert.") ELSE set "Dauer=Die Umwandlung hat %Dauer% gedauert."
endlocal& set "Dauer=%Dauer%"&echo.&echo %Dauer%&echo.&if "%DTGm%" neq "0" set "DTGm=%DTGm%"
:Ende
pause
Die Pause am :Ende sollte vielleicht bei aktiver Verwendung entfernt werden,
ausser, Ihr wollt sie so im Explorer verwenden.
Meine Variante wäre diese:
@echo off&setlocal enabledelayedexpansion
set "info=no"
:Anfang
FOR /f "delims==" %%i IN ('set Media') DO @set "%%i="
cls & if not "%info%"=="no" %info%
set "info=cls&echo.&echo Bitte einen Dateinamen eingeben."
set "inf1=cls&echo.&echo Die Datei ist nicht vorhanden.&echo."
set "inf2= und&echo die Datei-Endung nicht vergessen.&echo."
if "%~1"=="" set /P Media1= Welche 1. Datei?
if not "%~1"=="" set "Media1=%~1"
if "%Media1%"=="" goto :Anfang
if not exist "%Media1%" set "info=%inf1%"& goto :Anfang
if "%~2"=="" set /P Media2= Welche 2. Datei?
if not "%~2"=="" set "Media2=%~2"
if "%Media2%"=="" if not "%Media1%"=="" set "Media2=%Media1%"
if "%Media1:~-4,1%"=="." set "EXC=%Media1:~-3,3%"
if "%Media2:~-4,1%"=="." set "OXC=%Media2:~-3,3%"
if "%EXC%"=="" set "info=%info:~0,-1%%inf2%"& goto :Anfang
if "%OXC%"=="" set "info=%info:~0,-1%%inf2%"& goto :Anfang
cls & echo.
FOR /f "tokens=1-5 delims=.: " %%i IN ('dir /tc "%Media1%"^|find /i ".%exc%"') DO @(
set /a "ATdd = 100%%i, ATdd %%= 100, ATmm = 100%%j, ATmm %%= 100, AT1h = 100%%l, AT1h %%= 100, AT1m = 100%%m, AT1m %%= 100"
set /A ATjj=%%k/4*4
if not !ATjj! equ %%k set "ATSJ=no"
)
set /A ATGm=(!AT1h!*60)+!AT1m!
echo ATdd: --%ATdd%--&echo ATmm: --%ATmm%--&echo ATSJ: --%ATSJ%--&echo AT1h: --%AT1h%--&echo AT1m: --%AT1m%--
echo --------------
echo ATGm: %ATGm% min
echo ==============
FOR /f "tokens=1-5 delims=.: " %%i IN ('dir /tw "%Media2%"^|find /i ".%oxc%"') DO @(
set /a "BTdd = 100%%i, BTdd %%= 100, BTmm = 100%%j, BTmm %%= 100, BT1h = 100%%l, BT1h %%= 100, BT1m = 100%%m, BT1m %%= 100"
set /A BTjj=%%k/4*4
if not !BTjj! equ %%k set "BTSJ=no"
)
set /A BTGm=(!BT1h!*60)+!BT1m!
echo BTdd: --%BTdd%--&echo BTmm: --%BTmm%--&echo BTSJ: --%BTSJ%--&echo BT1h: --%BT1h%--&echo BT1m: --%BT1m%--
echo --------------
echo BTGm: %BTGm% min
if %ATmm% lss %BTmm% @(
FOR %%i IN (4,6,9,11) DO @if %ATmm% equ %%i set A1dd=30
FOR %%i IN (1,3,5,7,8,10,12) DO @if %ATmm% equ %%i set A1dd=31
if %ATmm% equ 2 if "%ATSJ%"=="no" (set "A1dd=28") ELSE set "A1dd=29"
set /A DTdd=%BTdd%+!A1dd!-%ATdd%
) ELSE (
if %ATmm% gtr %BTmm% (set /A DTdd=%BTdd%+31-%ATdd%
) ELSE set /A DTdd=%BTdd%-%ATdd%
)
if "%DTdd%" equ "0" (set /A DTGm=%BTGm%-%ATGm%) ELSE set /A DTGm=(DTdd*24*60)+%BTGm%-%ATGm%
echo.
echo Dauer: %DTGm% min
echo ===================================
if %DTGm% LSS 60 goto :tim1
set /A STD=%DTGm%/60
set /A MIN=%DTGm%-(!STD!*60)
set /A MIN=1%min%-100
:tim1
if %DTGm% LSS 60 (if "%DTGm%" equ "0" (set "Dauer=keine Minute") ELSE set "Dauer=%DTGm% min"
) ELSE set "Dauer=%std%:%min% h"
if "%Media1%"=="%Media2%" (set "Dauer=Der Prozeá hat %Dauer% gedauert.") ELSE set "Dauer=Die Umwandlung hat %Dauer% gedauert."
endlocal& set "Dauer=%Dauer%"&echo.&echo %Dauer%&echo.&if "%DTGm%" neq "0" set "DTGm=%DTGm%"
:Ende
Der Befehl vor dem ":Ende" bewirkt den Erhalt der Variablen %Dauer% und %DTGm% für die weitere Verwendung.
Alle anderen Variablen sind durch den Lokalschluss endlocal hinweggefegt.
Den Eingangsbereich (Zeilen 1-20) verwende ich nicht, da ich diesen Dateien-Check innerhalb einer anderen Batch nutze.
Doch dazu ein andermal mehr.
Viel Spaß beim Testen. Fehlerhinweise und Verbesserungsvorschläge sind wie immer gern gesehen.
max5moritz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 197678
Url: https://administrator.de/contentid/197678
Ausgedruckt am: 24.11.2024 um 00:11 Uhr