Ich habe einen Prozess, den ich aus einer Batchdatei ausführe, und ich möchte ihn nur an einem bestimmten Wochentag ausführen.
Ist es möglich, den Wochentag zu bekommen?
Alle Beispiele, die ich gefunden habe, stützen sich irgendwie auf "Datum / t", um "Freitag, 11.12.2009" zurückzugeben. In meinem Computer gibt "Datum / t" jedoch "11.12.2009" zurück. Kein Wochentag da.
Ich habe bereits die "regionalen Einstellungen" für meinen Computer überprüft, und das lange Datumsformat enthält den Wochentag. Das kurze Datumsformat funktioniert nicht, aber ich möchte das lieber nicht ändern, da es eine Reihe von Dingen betrifft, die ich mache.
windows-server-2008
batch
ms-dos
date
Daniel Magliola
quelle
quelle
Antworten:
Ich bin etwas spät zu dieser Party, aber das gibt dir den Wochentag:
Verwenden Sie eine Batch-for-Schleife, um die Ausgabe zu erhalten, und Sie haben eine testbare Bedingung für den Wochentag.
rauben
quelle
Hier ist eine Batch-Datei, in der alle Datums- und Uhrzeitinformationen in Variablen gespeichert werden. Dies hängt jedoch davon ab, ob auf Ihrem Computer ein geeignetes Datumsformat festgelegt ist. Außerdem muss die Reihenfolge möglicherweise je nach lokalem Datumsformat angepasst werden. Ich bin mir nicht sicher.
Das gewünschte Bit ist in% WD%.
quelle
Hier ist die richtige Antwort für ein BAT-Skript auf einem modernen System:
Ausgänge:
Verwendungszweck:
Ich habe dies für PCs verwendet, die täglich automatisch aus dem BIOS booten und keine Option zum Ausschließen von Wochenenden haben.
Nebenbei: ACPI ist eine zuverlässigere Methode, um dies zu tun, und ermöglicht die Verwendung eines Dummy-BAT-Skripts
exit
, das beispielsweise in einer geplanten Windows-Aufgabe mit bestimmten ausgewählten Tagen verwendet wird. Verwenden Sie dazu die Option Computer aufwecken, um diese Aufgabe auszuführen .quelle
Batch kann das nicht einfach machen. Es erfordert viel Befehlszeile mit dem Befehl date. Es gibt einige Möglichkeiten, um das zu erreichen, wonach Sie suchen, aber vor allem frage ich mich, warum der integrierte Taskplaner keine Option ist. Hier können Sie die Tage angeben, an denen es ausgeführt werden soll, und zu welcher Zeit:
Sie können auch VBScript verwenden:
Dann führen Sie es aus:
Sie können die if / else-Logik in VBScript problemlos verwenden und dann Ihren VBScript-Code je nach Tag Batch-Dateien ausführen lassen und umgekehrt (Batch-Aufruf eines VBScript).
quelle
Jetzt müssen nur noch Nullen an Tag und Monat angehängt werden, wenn eine von beiden weniger als 10 beträgt.
quelle
Meine Antwort basiert auf RobWs Antwort, aber er gibt einfach den Wochentag wieder, während die Frage lautete, wie der Verlauf des Skripts je nach Wochentag geändert werden kann (genau das, was ich auch tun wollte). Nun, es stellte sich als weniger einfach heraus, als es sich anhört, weil die
FOR
Schleife irgendwie zwei Zeilen anstelle von einer verarbeitet und die zweite (die leer zu sein scheint) die Skriptausführung unterbricht.Die einzige
FOR
Schleife, die tatsächlich für mich funktioniert hat, ohne die Ausführung zu unterbrechen, ist die folgende:Der
2>NUL
Teil unterdrückt den Fehler, der sonst während der zweiten Zuweisung angezeigt würde, während er/a
sich mit dem einen Leerzeichen befasst, das aufgrund der Umleitung hinzugefügt wird.quelle
Darf ich etwas zitieren, das ich im Internet gefunden habe:
Das funktioniert wirklich, jetzt müssen Sie nur noch den DOW aus dem Ausgangsstring fummeln und fertig ...
quelle
Tatsächlich ist das Flag für dieses (2K8, 2K3, XP usw.) das KURZE Datumsformat.
Klicken Sie unter Regional- und Sprachoptionen auf die Schaltfläche Anpassen. Ändern Sie auf der Registerkarte DATUM das KURZE Datumsformat in "M / t / jjjj". Ändern Sie das LANGE Datumsformat in "TTTT, MMMM TT, JJJJ".
Dann wird der Wochentag angezeigt - um dies zu testen, führen Sie dies in einer Dos-Eingabeaufforderung aus: Datum / t Die Ausgabe sollte wie folgt aussehen: "Mo 31.01.2011"
quelle
Falls jemand es braucht, funktioniert dies für mich unter Windows 7 und XP ...
Für Windows Server 2008 würde ich eine der oben vorgeschlagenen Powershell-Methoden verwenden.
quelle
Um zu vermeiden, dass Sie in eine Textdatei umleiten müssen, gibt es eine Variation des FOR, die eine Befehlszeichenfolge verwendet. Hier ist es:
@For / F "tokens = 4 delims = / -"% i In ('@Echo.^|Command / C Date ^ | Find / i "current" ') Do @Echo% i
Denken Sie daran, doppelte Prozentzeichen zu verwenden, wenn Sie diesen Befehl in ein Dos-Skript einfügen. In meinem Beispiel habe ich nach dem allgemeinen Datumsbegrenzungszeichen für Schrägstrich oder Bindestrich gesucht.
Ich bevorzuge diese Lösung, da es sich ausschließlich um DOS handelt, ohne sich darauf verlassen zu müssen, ob WMI, PowerShell usw. vorhanden sind oder nicht.
quelle
Wie wäre es mit diesem für Windows 2008, viel eleganter. Funktioniert auch überall dort, wo Powershell installiert ist.
quelle
Dank Phil Swiss vorheriger Veröffentlichung - das ist ein Vergnügen:
echo. | cmd /C date | find "current"
Anwendungsbeispiele:
echo. | cmd /C date | find /i "Fri" && echo today is Friday
Oder um umzukehren:
echo. | cmd /C date | find /i "Fri" || echo today is NOT Friday
quelle
Dies kann mit einer einfachen Berechnung erfolgen
quelle
Ich bin in den USA. Ich kann diesen Code unter Windows 7, Windows 2008 R2, Windows Server 2003 und Windows XP ausführen (alle Betriebssysteme sind mit Windows-Updates und -Patches aktuell). Alle mit kurzer Datumseinstellung ohne ddd (oder dddd) (Wochentag).
Wenn heute Donnerstag ist, würde "The Day Is: Thu" ausgegeben.
Dies gibt den Tag für alle 4 Windows-Versionen zurück, auf denen ich getestet habe. Und nur der Tag. Wenn ich mein Kurzdatum-Setup auf "TTT, M / TT / JJJJ" änderte, zeigte meine Ausgabe den Tag mit einem Komma (z. B. Do) an, das besagt, dass dieser Code das Kurzdatum-Format verwendet. Was aber auch passieren kann, ist, dass wenn das kurze Datum nicht den Wochentag enthält, es möglicherweise auf das lange Datumsformat abzielt, das auf allen 4 Computern, auf denen ich getestet habe, dddd im Format hat.
quelle
quelle
Wenn Sie mehrere Tage ausführen möchten, fügen Sie die folgenden Werte hinzu:
quelle
Die von Atntoni Gual veröffentlichte Lösung funktioniert im einfachen Stapel, aber wir müssen einige Variablen zuweisen, bevor wir die Berechnung durchführen
quelle
Nur eine weitere Antwort, die genau dies mit verwendet
wmic
quelle
Ok, habe eine Antwort gefunden ...
Ich konnte keinen Weg finden, einfache BAT-Dateien zu verwenden, aber wenn Sie Zugriff auf Powershell haben ...
Ich hoffe es hilft...
EDIT: (für potenzielle Leute, die darüber stolpern) Dies ist böse und hässlich und sollte nicht getan werden, und andere Antworten auf diese Frage sind besser, wenn sie auf Sie zutreffen. Wenn Sie dies schnell und schmutzig in einer bereits vorhandenen Batch-Datei erledigen müssen, könnte dies jedoch für Sie funktionieren.
Daniel
quelle
powershell "&{[int](Get-Date).DayOfWeek}"
ist wahrscheinlich die bessere Antwort, und Sie können diese einfach in eine Umgebungsvariable einfügen und vergleichen.Ich benutze...
... um die aktuelle Tagesnummer zu erhalten.
quelle
quelle