2003 Server Batch mit Wochentag verbessern (Mon Mo)
engliche Wochenname in deutsche ändern
Morgen allerseits,
(schon 11:00 ! hatte noch keinen Kaffe also noch frühster Morgen)
Ich möchte meine Backup-Bach schlanker machen, d.h. die Umwandlung von englischen zur deutschen Wochentagen
Fragen:
1.) Das müsste doch irgendwie so anfangen ?
2.) Wie kann man mindestens aus den IFs einen Einzeiler machen ?
Morgen allerseits,
(schon 11:00 ! hatte noch keinen Kaffe also noch frühster Morgen)
Ich möchte meine Backup-Bach schlanker machen, d.h. die Umwandlung von englischen zur deutschen Wochentagen
for /F "tokens=1 delims= " %%A in ('now') do set wday=%%A
echo %wday%
IF %wday%==Mon SET wday=Mo
IF %wday%==Tue SET wday=Di
IF %wday%==Wed SET wday=Mi
IF %wday%==Thu SET wday=Do
IF %wday%==Fri SET wday=Fr
IF %wday%==Sat SET wday=Sa
IF %wday%==Sun SET wday=So
echo %wday%
robocopy.exe d:\Verwaltung\Untis \\pc-lieb\Backup\Untis\%wday% /MIR /NFL /NDL /LOG+:D:\Backup\Untis.log
1.) Das müsste doch irgendwie so anfangen ?
for /f "tokens=%1" %%A in ('echo/Mon Tue Wed Thu Fri Sat Sun') do set %2=%%a
2.) Wie kann man mindestens aus den IFs einen Einzeiler machen ?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 41058
Url: https://administrator.de/forum/2003-server-batch-mit-wochentag-verbessern-mon-mo-41058.html
Ausgedruckt am: 23.12.2024 um 15:12 Uhr
7 Kommentare
Neuester Kommentar
Hi,
schau mal hier vorbei: Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
Gruß @bastla
schau mal hier vorbei: Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
Gruß @bastla
Moin Andynix,
ist IMHO grundsätzlich der falsche Ansatz, aus einem Anzeigewert einen neuen Anzeigewert abzuleiten.
Wenn schon, dann werden numerische Werte "mehrsprachig" angezeigt.
Heißt, dass jeder anständige Coder bestenfalls die numerischen Werte für Wochentag (0-6 oder 1-7 oder wie sie je nach Werkzeug heißen) durch einen englischen, deutschen, spanischen oder sächsischen Text visualisiert.
Ich würde also den Wochentag als NumWert ermitteln - siehe im Bereich "Batch & Shell" das Tutorial "Umgang mit Datums- und Zeitvariablen im Batch".
Dennoch gibt es natürlich mehrere Varianten, wie ich Deine konkrete Anforderung mit ein oder zwei FOR-Anweisungen abfackeln könnte.
Eine davon (nachdem Dein %wday% als Variable gesetzt ist)
Output wird sein:
Works as designed...
...aber vorgehen würde ich so nicht, wenn es ein robuster und kompatibler Produktivbatch werden soll.
Gruß
Biber
ist IMHO grundsätzlich der falsche Ansatz, aus einem Anzeigewert einen neuen Anzeigewert abzuleiten.
Wenn schon, dann werden numerische Werte "mehrsprachig" angezeigt.
Heißt, dass jeder anständige Coder bestenfalls die numerischen Werte für Wochentag (0-6 oder 1-7 oder wie sie je nach Werkzeug heißen) durch einen englischen, deutschen, spanischen oder sächsischen Text visualisiert.
Ich würde also den Wochentag als NumWert ermitteln - siehe im Bereich "Batch & Shell" das Tutorial "Umgang mit Datums- und Zeitvariablen im Batch".
Dennoch gibt es natürlich mehrere Varianten, wie ich Deine konkrete Anforderung mit ein oder zwei FOR-Anweisungen abfackeln könnte.
Eine davon (nachdem Dein %wday% als Variable gesetzt ist)
::-----snipp wdays.bat
@echo off & setlocal
....
:: Beispielwert "Thu" setzen
set wDay=Thu
for %%i in (Mon:Mo Tue:Di Wed:Mi Thu:Do Fri:Fr Sat:Sa Sun:So) do @for /f "tokens=1-2 delims=:" %%a in ("%%i") do if %%a==%wday% echo %wday%=%%b
>wdays.bat
Thu=Do
Works as designed...
...aber vorgehen würde ich so nicht, wenn es ein robuster und kompatibler Produktivbatch werden soll.
Gruß
Biber
Na ja, Andynix,
eigentlich reicht dann auch ein Oneliner für das ganze Gelumpe..
Ich ziehe den mal aus ästhetischen Gründen auf ein paar Zeilen auseinander:
Output (er macht ja ein "@echo robocopy" statt wirklich "robocopy" auszuführen...)
Falls mal wieder ein Tankstellen-PC-Zeitschriften-Wettbewerb für "Die schönsten Batch-Oneliner" läuft, dann kannst Du den ja einschicken..
Grüße
Biber
P.S. Wenn Deine eigentliche Frage jetzt beantwortet ist, könntest Du bitte den Beitrag als "gelöst" abhaken. Danke.
eigentlich reicht dann auch ein Oneliner für das ganze Gelumpe..
Ich ziehe den mal aus ästhetischen Gründen auf ein paar Zeilen auseinander:
:: -----------snipp DoTheDailyBackup.bat
@for /f %%t in ('now') do @(
for %%i in (Mon:Mo Tue:Di Wed:Mi Thu:Do Fri:Fr Sat:Sa Sun:So) do @(
for /f "tokens=1-2 delims=:" %%a in ("%%i") do @(
@if %%a==%%t @echo robocopy.exe d:\Verwaltung\Untis \\pc-lieb\Backup\Untis\%%b /MIR /NFL /NDL /LOG+:D:\Backup\Untis.log
)))
Output (er macht ja ein "@echo robocopy" statt wirklich "robocopy" auszuführen...)
>doTheDailyBackup.bat
robocopy.exe d:\Verwaltung\Untis \\pc-lieb\Backup\Untis\Do /MIR /NFL /NDL /LOG+:D:\Backup\Untis.log
Falls mal wieder ein Tankstellen-PC-Zeitschriften-Wettbewerb für "Die schönsten Batch-Oneliner" läuft, dann kannst Du den ja einschicken..
Grüße
Biber
P.S. Wenn Deine eigentliche Frage jetzt beantwortet ist, könntest Du bitte den Beitrag als "gelöst" abhaken. Danke.
Probiers mal hiermit:
wotag.vbs
WoTag = Weekday(Date)
select case WoTag
case 1 WoTag="set ttag=So"
case 2 WoTag="set ttag=Mo"
case 3 WoTag="set ttag=Di"
case 4 WoTag="set ttag=Mi"
case 5 WoTag="set ttag=Do"
case 6 WoTag="set ttag=Fr"
case 7 WoTag="set ttag=Sa"
end select
Set ws = CreateObject("WScript.Shell")
MSGString = "cmd /C echo " & WoTag & " > c:\wotag.bat"
Ret = ws.run (MSGString,0,true)
WScript.Quit()
Jepp, nachtgrabb,
so in der Art meinte ich das mit dem Ableiten des Wochentag-Textes aus dem numerischen Wochentagswert....
Falls Andynix ein deutschsprachiges W2003-Modell am Laufen hat, ginge es auch direkt über die VBS-WeekDayName-Funktion.
Basteln, aufrufen und entsorgen des erforderlichen VBS-Snippets aus der Batch heraus könnte dann so erfolgen:
Dein Code, nachtgrabb, ist natürlich viel lesbarer, keine Frage... aber AndyNix wollte ja genau diese CASE..-Konstrukte eindampfen.
Gruß
Biber
so in der Art meinte ich das mit dem Ableiten des Wochentag-Textes aus dem numerischen Wochentagswert....
Falls Andynix ein deutschsprachiges W2003-Modell am Laufen hat, ginge es auch direkt über die VBS-WeekDayName-Funktion.
Basteln, aufrufen und entsorgen des erforderlichen VBS-Snippets aus der Batch heraus könnte dann so erfolgen:
..
Echo wscript.echo Left(WeekdayName(WeekDay(Date)),2)>%temp%\wday2snippet.vbs
For /f %%i in ('cscript //nologo %temp%\wday2snippet.vbs') do set "wday=%%i"
del %temp%\wday2snippet.vbs
:: in %wday% stehen jetzt die ersten 2 Zeichen vom Wochentag..heute also "Fr" vom "Freitag"
...
Dein Code, nachtgrabb, ist natürlich viel lesbarer, keine Frage... aber AndyNix wollte ja genau diese CASE..-Konstrukte eindampfen.
Gruß
Biber