ist wahrscheinlich gar nicht wild, aber wie kann ich in einer Batchfile
den aktuelle Wochentag herausfinden?
Bräuchte etwas in der Art:
Wenn Wochentag = Montag dann Kopiere Datei A
Wenn Wochentag = Dienstag dann Kopiere Datei B
usw.
Das ganze soll auf einen 2003 Server laufen.
Vielen Dank im voraus.
Markus
Einem Server von 2003? Welcher Hersteller? :-)
Sorry. Meinte natürlich MS Windows Server 2003. Die Angabe nur, weil es
evtl. unterschiede in der Batchprogrammierung geben könnte.
Markus Mange schrieb:
> Hallo NG,
>
> ist wahrscheinlich gar nicht wild, aber wie kann ich in einer Batchfile
> den aktuelle Wochentag herausfinden?
dochdoch, das ist nicht so ohne weiteres möglich.
Am einfachsten schreibst du dir ein kleines Programm in einer beliebigen
Programmiersprache, das den aktuellen Wochentag als Rückgabewert
zurückgibt. Dann kannst du mit ERRORLEVEL den Tag abfragen.
Etwa so:
-------------8<------------------------------------
REM Aufruf des Programms, das den Wochentag als Fehlercode liefert
ruby datum.rb
REM Auswertung des Errorcodes. Reihenfolge von "oben nach unten",
REM da errorlevel auf ">=" testet.
if errorlevel 7 ( echo "Samstag"
) else (if errorlevel 6 ( echo "Freitag"
) else (if errorlevel 5 ( echo "Donnerstag"
) else (if errorlevel 4 ( echo "Mittwoch"
) else (if errorlevel 3 ( echo "Dienstag"
) else (if errorlevel 2 ( echo "Montag"
) else (if errorlevel 1 ( echo "Sonntag"
) else ( echo "Kein Tag"
)))))))
-------------8<------------------------------------
> Das ganze soll auf einen 2003 Server laufen.
Das dürfte ziemlich egal sein. Seit NT hat sich da nicht mehr viel dran
getan.
Falls du auch mein geniales Ruby-Skript haben willst, das die obige
Batch-Datei aufruft: Hier ist es:
-------------8<------------------------------------
#!/usr/bin/env ruby
heute = Time.new
# p (heute.wday + 1)
exit (heute.wday + 1)
-------------8<------------------------------------
Manchmal wundert man sich wirklich, wie eingeschränkt man mit der
Kommandozeile unter Win ist... 8-)
Gruß
pi
--
This room is air conditioned and the SUN is shining the NeXT days,
so please, don't open windows.
???
> Etwa so:
REM
date /T | find "Mi" && copy ...
usw.
Georg
Ein
date /T | find "Mi" && echo "Mittwoch"
liefert unter Win2000 nur
find: Mi: No such file or directory
<DokuLes> Aha! </DokuLes>
Wenn ich das Pipe-Symbol weglasse geht es.
Aus der Onlinehilfe von find:
"Fehlt der Pfad, so durchsucht FIND von der Tastatur aus eingegebenen
Text oder die Ausgabe des Befehls, der FIND in einer Befehlskette
vorangestellt ist."
Boah ist das krank...
Gruß
pi
PS: Also so gehts:
date /T find "Mi" && echo "Mittwoch"
--
"Findest du das nicht auch irnkwie merkwürdig, dass die Musiker
von Klang_farben_ sprechen und die Maler von Farb_tönen_?"
(Volker Gringmuth in de.rec.music.machen)
Du willst sagen, "liefert unter meiner Unix-Emulation, die sich
auf meinem Win2000 breit macht",
> find: Mi: No such file or directory
Das ist eine Fehlermeldung von GNU find, nicht Windows find.
> <DokuLes> Aha! </DokuLes>
> Wenn ich das Pipe-Symbol weglasse geht es.
Dann geht was anderes...
> Boah ist das krank...
Ja, schon merkwürdig.
Hat noch jemand vorschläge, oder mache ich komplett was falsch?
Gruß
Markus
Vielleicht doch die Funktionen des servers nutzen?
Man kann jobs fuer Windows einrichten, die zu bestimmten Zeiten, Tagen,
Wochentagen usw. laufen.
Setzt dann allerdings ein paar Kenntnisse der Windows-Systemverwaltung
voraus.
Georg
ja.
> Hat noch jemand vorschläge, oder mache ich komplett was falsch?
Als ich das letzte Mal was komplizierteres in Windows mit Bordmitteln
scripten musste, habe ich den WSH mit JScript benutzt. Dafür ist er
schließlich da.
var day_of_week = (new Day).getDay();
0=Sonntag .. 6=Samstag.
Ob man das jetzt auch als Errorlevel irgendwie rausbekommt, bin ich
überfragt; im Zweifelsfall lass das JS-Programm eine Batchdatei anlegen
und führe die aus o.ä.
Stefan
> Vielleicht doch die Funktionen des servers nutzen?
>
> Man kann jobs fuer Windows einrichten, die zu bestimmten Zeiten, Tagen,
> Wochentagen usw. laufen.
> Setzt dann allerdings ein paar Kenntnisse der Windows-Systemverwaltung
> voraus.
>
das wollte ich eigentlich vermeiden. Weil ich habe hier schon ein etwas
größeres Batchfile, das unter der Woche automatisch per "Geplanter Task"
ausgeführt wird. Und da wollte ich das ganze anhängen.
Aber wenn es nicht geht, dann mach ich mir eben 7 Bat Dateien und lass
Sie eine viertel Stunde nach dem Hauptbatchfile laufen.
Vielen Dank an alle, die geholfen haben.
Gruß
Markus
bei mir (Microsoft Windows XP) funktioniert folgendes Batch-file:
@echo off
for /F "tokens=1,2* delims=-" %%A in ('date /T') do \
set /A J=%%A && set /A M=%%B && set /A T=%%C
@rem for /F "tokens=1,2* delims=-" %%A in ('echo %1') do \
set /A J=%%A && set /A M=%%B && set /A T=%%C
set /A R=J%%4
set /A S=0
if %R% EQU 0 set /A S=1
set /A F=0
if %M% GEQ 3 set /A F=S-2
set /A A=0
if %M% GEQ 8 set /A A=1
set /A W=(3+((3+1461*J)/4)%%7+((-60+61*M+A)/2+F)%%7+T)%%7
@echo %W%
(bei den Zeilen mit "\"-Zeichen am Ende dieses und den Zeilenumbruch
entfernen)
Inhalt der Ugebeungsvariablen:
J ... Jahreszahl vierstellig
M ... Monat 1-12
T ... Tag
S ... Schaltjahr 0 oder 1
F ... Februarkorrektur 0 oder S-2
A ... Augustkorrektur 0 oder 1
W ... Wochentag Mo-So 0-6 (Ergebnis)
Magische Zahlen:
1461 ... Tage in vier Jahren
61 ... Tage in zwei Monaten (im Mittel genau genug)
Sollte wegen vereinfachter Schaltjahrregel nur von 1901 bis 2099
funktionieren.
Erklärungen:
help echo
help for
help rem
help set
help if
mfG Josef
Lemmi