Problem bei Zeit Variable in Batch unter engl. Win95
Blutiger Anfänger sucht Rat...
Erstmal ein freundliches „Hallöchen“ an alle
zu meinen Problem:
Ich möchte div. Ordner u. Dateien per Batch als Sicherungskopie an eine andere Stelle in einen Backup-Ordner kopieren. Den Sicherungsordner natürlich versehen mit Datum und Zeit – Stempel.
Durch viele Tipps hier im Forum und aus anderen Foren, habe ich begonnen mir eine Batch zusammen zu Basteln die im Großen u. Ganzen auch funktioniert, mit einer Ausnahme:
Das Englische Zeitformat macht mir Probleme!
Die Uhrzeit wird als Beispiel mit 08:14:56.03p ausgegeben. Nun kann man ja keinen Ordner mit : (Doppelpunkt) im Name anlegen (Sonderzeichen). Hier mal meine Batch zur Verdeutlichung was ich so verbrochen habe…
- Die Variable %xdate% funktioniert bestens
- %xtime% leider nicht.
Mein Hilfeschrei an alle Experten:
wie könnte man meine Batch so umbauen, dass das Zeit-Format auch im Ordnername funktioniert?
Im Win95 möchte ich die Ländereinstellung nicht ändern, da das Windows95 als Betriebssystem auf einer Fräsmaschine läuft u. die Frässoftware die engl. Ländereinstellung benötigt.
Bin mit meinem Anfängerwissen jetzt leider doch an meiner Persönlichen Grenze angekommen.
Danke schon mal an alle für die Hilfe
Mit freundlichen Grüßen Blutwurst-
Erstmal ein freundliches „Hallöchen“ an alle
zu meinen Problem:
Ich möchte div. Ordner u. Dateien per Batch als Sicherungskopie an eine andere Stelle in einen Backup-Ordner kopieren. Den Sicherungsordner natürlich versehen mit Datum und Zeit – Stempel.
Durch viele Tipps hier im Forum und aus anderen Foren, habe ich begonnen mir eine Batch zusammen zu Basteln die im Großen u. Ganzen auch funktioniert, mit einer Ausnahme:
Das Englische Zeitformat macht mir Probleme!
Die Uhrzeit wird als Beispiel mit 08:14:56.03p ausgegeben. Nun kann man ja keinen Ordner mit : (Doppelpunkt) im Name anlegen (Sonderzeichen). Hier mal meine Batch zur Verdeutlichung was ich so verbrochen habe…
@echo off
set quell=C:\Dh_test
set ziel=D:\Testback
set field=3
set key=Current
if %OS%!==Windows_NT! set field=4
if %OS%!==Windows_NT! set key=The
echo. | date | find "%key%" > }{.bat
echo shift> %key%.bat
echo set xdate=%%%field% >> %key%.bat
call }{
echo. | time | find "%key%" > }{.bat
echo set xtime=%%%field% > %key%.bat
call }{
del %key%.bat
del }{.bat
set field=
set key=
echo %xdate% %xtime%
echo Ordner (Daten) von %quell% nach %ziel%
xcopy "%quell%" "%ziel%\%xdate%%xtime%" /V /E /S /Y /I /R /H /q
set quell=C:\Dh_test
set ziel=D:\Testback
set field=3
set key=Current
if %OS%!==Windows_NT! set field=4
if %OS%!==Windows_NT! set key=The
echo. | date | find "%key%" > }{.bat
echo shift> %key%.bat
echo set xdate=%%%field% >> %key%.bat
call }{
echo. | time | find "%key%" > }{.bat
echo set xtime=%%%field% > %key%.bat
call }{
del %key%.bat
del }{.bat
set field=
set key=
echo %xdate% %xtime%
echo Ordner (Daten) von %quell% nach %ziel%
xcopy "%quell%" "%ziel%\%xdate%%xtime%" /V /E /S /Y /I /R /H /q
- Die Variable %xdate% funktioniert bestens
- %xtime% leider nicht.
Mein Hilfeschrei an alle Experten:
wie könnte man meine Batch so umbauen, dass das Zeit-Format auch im Ordnername funktioniert?
Im Win95 möchte ich die Ländereinstellung nicht ändern, da das Windows95 als Betriebssystem auf einer Fräsmaschine läuft u. die Frässoftware die engl. Ländereinstellung benötigt.
Bin mit meinem Anfängerwissen jetzt leider doch an meiner Persönlichen Grenze angekommen.
Danke schon mal an alle für die Hilfe
Mit freundlichen Grüßen Blutwurst-
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58097
Url: https://administrator.de/forum/problem-bei-zeit-variable-in-batch-unter-engl-win95-58097.html
Ausgedruckt am: 22.04.2025 um 15:04 Uhr
14 Kommentare
Neuester Kommentar
Hallo Blutwurst- und willkommen im Forum!
Mit W95-Bordmitteln sehe ich eigentlich keine Möglichkeit zur Umwandlung der ":" in etwas Brauchbares, daher würde ich Dir das Utility "sed" empfehlen (Download zB über diese Seite oder gleich die Version GNU sed v4.0.7).
Der Einsatz könnte etwa so aussehen:
Damit werden alle ":" und "." in "-" umgewandelt (oder zB mit
einfach durch Nichts ersetzt, also entfernt).
Letztes Beispiel:
entfernt alle Zeichen außer den Ziffern ("0" - "9").
Grüße
bastla
Mit W95-Bordmitteln sehe ich eigentlich keine Möglichkeit zur Umwandlung der ":" in etwas Brauchbares, daher würde ich Dir das Utility "sed" empfehlen (Download zB über diese Seite oder gleich die Version GNU sed v4.0.7).
Der Einsatz könnte etwa so aussehen:
echo. | time | find "%key%" | sed s/[:.]/-/g > }{.bat
... | sed s/[:.]//g
Letztes Beispiel:
... | sed s/[^^0-9]//g
Grüße
bastla
Das Tutorial von Biber ist ja mal richtig „Brutal“ (positiv
gemeint)…. Da Raucht einem Beginner wie mir ja echt die Birne… *lach*
gemeint)…. Da Raucht einem Beginner wie mir ja echt die Birne… *lach*
Ja, unser Bereich Batch und Shell in seinem völlig unbeachteten Seitenzweig dieses Univers^WForums ist ein immerwährender Quell heller Freude.
geTuemII
@geTuemII
Du deckst den nahrhaften Kollegen aber ordentlich ein ...
Warum ich nicht reflexartig (und damit alleine heute schon zum zweiten Mal) auf Biber's Tutorial verwiesen habe, ist folgende Zeile seiner "GetAllDateTimeInfos.bat":
Ansonsten wäre es ja kein großes Problem, etwa ein
zu verwenden ...
@blutwurst-
Die Tutorials anzuschauen schadet aber trotzdem nicht.
Grüße
bastla
Du deckst den nahrhaften Kollegen aber ordentlich ein ...
Warum ich nicht reflexartig (und damit alleine heute schon zum zweiten Mal) auf Biber's Tutorial verwiesen habe, ist folgende Zeile seiner "GetAllDateTimeInfos.bat":
IF NOT "%OS%"=="Windows_NT" echo "%0 läuft nur unter WinNT oder höher. Sorry." && GOTO :eof
Ansonsten wäre es ja kein großes Problem, etwa ein
set xtime=%time:~0,8%
echo %xtime::=-%
@blutwurst-
Die Tutorials anzuschauen schadet aber trotzdem nicht.
Grüße
bastla
Moin blutwurst-,
auch von mir willkommen im Forum.
Zur Not hätte ich auch noch eine Alternative, falls Du keinen SED auftreibst, der unter Win95 fliegt...
Aber ganz eindeutig - ich halte bastlas Strategie mit SED für die allersinnvollste Option.
Der nachfolgende Batch ist mehr das Ergebnis sportlichen Ehrgeizes (oder kindlichen Spieltriebs?).
Der Batch läuft auch (mit angepassten SET $tmp$...SET $find$..-Werten) unter WinXP.
Hinterher stehen Stunden, Minuten, Sekunden in den Variablen %HH%, %MM$, %SS%.
Unter XP getestet:
Grüße
Biber
auch von mir willkommen im Forum.
Zur Not hätte ich auch noch eine Alternative, falls Du keinen SED auftreibst, der unter Win95 fliegt...
Aber ganz eindeutig - ich halte bastlas Strategie mit SED für die allersinnvollste Option.
Der nachfolgende Batch ist mehr das Ergebnis sportlichen Ehrgeizes (oder kindlichen Spieltriebs?).
@REM ---------snipp GetWin95ENTime.bat Placed in the Public Domain Biber 2007
@echo off
REM ---Time-Format möge sein 08:14:56.03p
REM ---ab hier anpassen!!!!!!!!!!!!!!
Set $tmp$=c:\temp\timetmp.txt
Set $find$=c:\Win95\find.exe
REM [unter WinNT++] Set $tmp$=%temp%\timetmp.txt
REM [unter WinNT++] SET $find$=find
REM ---bis hier anpassen!!!!!!!!!!!!!
REM Mit welchem Parameter/für welche Phase ist der Batch gerufen...
if "%1"=="" goto Init
if "%2"=="" goto GetHours
if "%3"=="" goto GetMinutes
REM Sekunden extrahieren Time-Format möge sein 08:14:56.03p
%$find$% ":%3." %$tmp$% > nul
REM ---ACHTUNG: bei Dt-Datumsformat ist es ein Komma statt des Punkts!!
REM [Dt] %$find$% ":%3," %$tmp$% > nul
if not errorlevel==1 if errorlevel==0 set SS=%3
goto done
REM Hier die Minuten rausfieseln:Time-Format 08:14:56.03p
:GetMinutes
%$find$% ":%2:" %$tmp$% >nul
if not errorlevel==1 if errorlevel==0 set MM=%2
goto done
REM ...Stunden rausdröseln ...die haben ein Leerzeichen vor der Ziffer..
:GetHours
%$find$% " %1:" %$tmp$% >nul
if not errorlevel==1 if errorlevel==0 set HH=%1
goto done
REM Die Zeit mit dem Befehl "echo.|time" in eine Datei schreiben
REM Die brauchen wir nämlich so ein- oder zweimal in dem Ablauf
:Init
echo.|time > %$tmp$%
REM Für alle Zeit-Teile [Stunden, Minuten, Sekunden]
REM die Alternativen durchflöhen... hilft ja nix...
REM Dafür brauchen wir halt diese Dummy-Parameter "x",
REM um Stunden als Stunden, Minuten als Minuten etc zu erkennen.
FOR %%i IN (0 1 2 3 4 5 6 7 8 9 10 11 12) DO CALL %0 %%i
REM --- Die nächste Zeile entREMen, wenn 24-Stundenformat
REM --- FOR %%i IN (13 14 15 16 17 18 19 20 21 22 23) DO CALL %0 %%i
REM ...alle Minuten-Anzeigen prüfen
FOR %%i IN (00 01 02 03 04 05 06 07 08 09) DO CALL %0 hr %%i
FOR %%i IN (10 11 12 13 14 15 16 17 18 19) DO CALL %0 hr %%i
FOR %%i IN (20 21 22 23 24 25 26 27 28 29) DO CALL %0 hr %%i
FOR %%i IN (30 31 32 33 34 35 36 37 38 39) DO CALL %0 hr %%i
FOR %%i IN (40 41 42 43 44 45 46 47 48 49) DO CALL %0 hr %%i
FOR %%i IN (50 51 52 53 54 55 56 57 58 59) DO CALL %0 hr %%i
REM ...alle Sekunden-Anzeigen prüfen
REM ---hier erweiterbar auch auf zwei Blöcke mit (00p 01p ...)
REM --- bzw 00a 01a ...59a) an Ende, um am/pm zu unterscheiden
FOR %%i IN (00 01 02 03 04 05 06 07 08 09) DO CALL %0 hr mm %%i
FOR %%i IN (10 11 12 13 14 15 16 17 18 19) DO CALL %0 hr mm %%i
FOR %%i IN (20 21 22 23 24 25 26 27 28 29) DO CALL %0 hr mm %%i
FOR %%i IN (30 31 32 33 34 35 36 37 38 39) DO CALL %0 hr mm %%i
FOR %%i IN (40 41 42 43 44 45 46 47 48 49) DO CALL %0 hr mm %%i
FOR %%i IN (50 51 52 53 54 55 56 57 58 59) DO CALL %0 hr mm %%i
REM Aufräumen, Tempdatei löschen
del %$tmp$%
:done
Der Batch läuft auch (mit angepassten SET $tmp$...SET $find$..-Werten) unter WinXP.
Hinterher stehen Stunden, Minuten, Sekunden in den Variablen %HH%, %MM$, %SS%.
Unter XP getestet:
>getWin95ENtime.bat
.....(etwas später...)
>echo %HH%--%MM%--%SS%
20--57--01
Grüße
Biber
@Biber
In der folgenden Zeile dürfte der Laufwerksbuchstabe verrutscht sein:
Der Ordnung halber auch noch der Hinweis auf das fehlende "$"-Zeichen vor "=":
Grüße
bastla
In der folgenden Zeile dürfte der Laufwerksbuchstabe verrutscht sein:
Set $find$=:\Win95\find.exe
REM [unter WinNT++] SET $find=find
Grüße
bastla
@Biber
Grüße
bastla
P.S.: Dann eben nur Meister ...
sorry, Werder spielt gerade ...
Hatte ich geahnt, wollte Dich aber lieber nicht darauf ansprechen.Grüße
bastla
P.S.: Dann eben nur Meister ...