Timestamp mehrfach erzeugen bzw. Mehrfachvariablen
Hallo zusammen,
in einer Batch verarbeite ich mehrfach Dateien mit einem timestamp.
Dadurch, dass die Batch weiterläuft, benötige ich verschiedene timestamps - denn die werden später ja nicht akutalisiert.
Mein Vorgehen also bisher:
Ich erzeuge, quasi auf Vorrat, einige timestamps, die ich im weiteren Verlauf abrufe.
Ansonsten hätte ich das Problem, dass die verschiedenen Dateien mit einem und demselben timestamp versehen werden, bzw. immer überschrieben werden:
Wie lässt sich das vereinfachen?
Gruß
okidoki
in einer Batch verarbeite ich mehrfach Dateien mit einem timestamp.
Dadurch, dass die Batch weiterläuft, benötige ich verschiedene timestamps - denn die werden später ja nicht akutalisiert.
Mein Vorgehen also bisher:
Ich erzeuge, quasi auf Vorrat, einige timestamps, die ich im weiteren Verlauf abrufe.
Ansonsten hätte ich das Problem, dass die verschiedenen Dateien mit einem und demselben timestamp versehen werden, bzw. immer überschrieben werden:
:: Datum un Uhrzeit
set YYYY=%date:~-4%
set YY=%date:~-2%
set MM=%date:~-7,2%
set DD=%date:~-10,2%
set hr=%time:~0,2%
if "%hr:~0,1%" == " " set hr=0%hr:~1,1%
set min=%time:~3,2%
set sek=%time:~6,2%
set timestamp1=%YYYY%-%MM%-%DD%_%hr%-%min%-%sek%
set daystamp1=%YY%:%MM%:%DD%
:: 2. timestamp
set YYYY=%date:~-4%
set YY=%date:~-2%
set MM=%date:~-7,2%
set DD=%date:~-10,2%
set hr=%time:~0,2%
if "%hr:~0,1%" == " " set hr=0%hr:~1,1%
set min=%time:~3,2%
set sek=%time:~6,2%
set timestamp2=%YYYY%-%MM%-%DD%_%hr%-%min%-%sek%
set daystamp2=%YY%:%MM%:%DD%
:: 3. timestamp ... usw.
Wie lässt sich das vereinfachen?
Gruß
okidoki
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 634200
Url: https://administrator.de/contentid/634200
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Mach dir n' Makro dafür das du überall einfach aufrufen kannst. (Hier verwende ich auch eine zuverlässigere Ermittlung des Timestamps der auch nicht Culture-Abhängig ist wie bei dir)
@echo off & setlocal ENABLEDELAYEDEXPANSION
:: timestamp1
call :mktime ts1
echo %ts1%
timeout /t 1 >nul
:: timestamp 2
call :mktime ts2
echo %ts2%
timeout /t 1 >nul
:: timestamp 3
call :mktime ts3
echo %ts3%
:: at the end jump over makro
goto :eof
:: Timestamp makro
:mktime
for /f %%a in ('wmic path win32_Localtime get Year^,Month^,Day^,Hour^,Minute^,Second /value ^| findstr .') do set /a %%a
for %%a in (month day hour minute second) do set "tmp=0!%%a!" &set "%%a=!tmp:~-2!"
set "timestamp=%Year%-%Month%-%day%_%Hour%-%Minute%-%Second%"
set "%~1=%timestamp%"
exit /b
Das geht so auch out of the box. Du hast nur einen Tippfehler in deinen Variablen.
Nur zur Info, die timeout Befehle sind nur zur Demo da das die Zeiten sich zumindest unterscheiden, die kannst du im Normalfall natürlich weglassen.
Nur zur Info, die timeout Befehle sind nur zur Demo da das die Zeiten sich zumindest unterscheiden, die kannst du im Normalfall natürlich weglassen.
@echo off & setlocal ENABLEDELAYEDEXPANSION
call :mktime ts1
timeout /t 1 >nul
call :mktime ts2
timeout /t 1 >nul
call :mktime ts3
goto :print
REM Makro
:mktime
for /f %%a in ('wmic path win32_Localtime get Year^,Month^,Day^,Hour^,Minute^,Second /value ^| findstr .') do set /a %%a
for %%a in (month day hour minute second) do set "tmp=0!%%a!" &set "%%a=!tmp:~-2!"
set "timestamp=%Year%-%Month%-%day%_%Hour%-%Minute%-%Second%"
set "%~1=%timestamp%"
exit /b
:print
echo %ts1%
echo %ts2%
echo %ts3%
Zitat von @OKIDOKI:
Eine kleine Anmerkung, die mir gestern schon aufgefallen war: Das Weglassen des timeout bewirkt aber weiterhin, dass die Variablen alle gleich sind.
Was erwartest du denn anderes?? Ist doch normal wenn man einfach mal nachdenkt! Keine Pause dazwischen bewirkt das die Batch so schnell arbeitet das der Timestamp beim Zuweisen immer der gleiche ist, passiert in Millisekunden. Du schreibst aber nur Timestamps mit Sekundenauflösung. Ergo völlig normal.Eine kleine Anmerkung, die mir gestern schon aufgefallen war: Das Weglassen des timeout bewirkt aber weiterhin, dass die Variablen alle gleich sind.
Von daher denke ich, dass der timeout doch notwendig ist!?
Nö, ist nur damit die sich in der Demo hier zumindest unterscheiden! Das schreiben von unterschiedlichen Timestamps in ein und dem selben Skript bringt nur was wenn das Skript selbst länger oder im Loop läuft. Direkt hintereinander ohne Pause macht das eben nur keinen Sinn ...Zitat von @OKIDOKI:
Klar, klar , der Punkt ist halt nur, da ja letztlich die Millisekunden nicht angezeigt werden und in sofern die Variablen doch gleich sind, oder?
Der Kandidat hat 100 Punkte.Klar, klar , der Punkt ist halt nur, da ja letztlich die Millisekunden nicht angezeigt werden und in sofern die Variablen doch gleich sind, oder?
Einfach klasse!
Na dann kannst du ja jetzt deinen Variablen auch einen Baum aufstellen