Wie kann ich unter Windows Server 2008 die Ausgabe eines Skripts erfassen, das mit dem Windows-Taskplaner ausgeführt wird?
Ich teste ein ziemlich langes benutzerdefiniertes Druck-Batch-Skript und möchte zu Debugging-Zwecken jeden Abend die gesamte Ausgabe davon sehen.
batch-file
scheduled-tasks
Mechaflash
quelle
quelle
Antworten:
Versuchen Sie dies als Befehlszeichenfolge im Taskplaner:
quelle
cmd /c "path with spaces/command.cmd > file.txt"
Sie diese Option zusätzlich, wenn Sie Leerzeichen haben. Die Antwort2>&1
von Ivan geht auch in die Zitate ein.cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
Mit stderr (wohin die meisten Fehler gehen):
quelle
Um die Antwort von @ user2744787 zu ergänzen, finden Sie hier einen Screenshot, der zeigt, wie
cmd
Argumente in einer geplanten Aufgabe verwendet werden:Programm / Skript:
cmd
Argumente hinzufügen:
/c run_with_default_port.bat > IMQuantWebServices.log
quelle
Das
>>
wird die Protokolldatei anhängen, anstatt sie jedes Mal zu überschreiben. Das2>&1
sendet auch Fehler an Ihre Protokolldatei.quelle
Sie können eine debug.cmd haben, die Ihrecript.cmd aufruft
Sie planen debug.cmd anstelle von yourscript.cmd
quelle
Verwenden Sie den
cmd.exe
Befehlsprozessor, um einen Dateinamen mit Zeitstempel zu erstellen, um die Ausgabe Ihrer geplanten Aufgabe zu protokollierenUm auf den Antworten anderer hier aufzubauen, möchten Sie möglicherweise eine Ausgabedatei erstellen, in die Datum und / oder Uhrzeit im Namen der Datei eingebettet sind. Sie können den
cmd.exe
Befehlsprozessor verwenden, um dies für Sie zu tun.Hinweis: Diese Technik verwendet die Zeichenfolgenausgabe interner Windows-Umgebungsvariablen und schneidet sie basierend auf der Zeichenposition auf. Aus diesem Grund sind die genauen Werte in den folgenden Beispielen möglicherweise nicht für die von Ihnen verwendete Windows-Region korrekt. Bei einigen regionalen Einstellungen können einige Komponenten des Datums oder der Uhrzeit ein Leerzeichen in den erstellten Dateinamen einfügen, wenn ihr Wert kleiner als 10 ist. Um dieses Problem zu beheben, umgeben Sie Ihren Dateinamen mit Anführungszeichen, sodass unbeabsichtigte Leerzeichen in der Datei vorhanden sind Der Name wird die von Ihnen erstellte Befehlszeile nicht beschädigen. Experimentieren Sie und finden Sie heraus, was für Ihre Situation am besten geeignet ist.
Sei dir bewusst, dass
PowerShell
das mächtiger ist alscmd.exe
. Eine Möglichkeit, die leistungsfähiger ist, besteht darin, dass sie mit verschiedenen Windows-Regionen umgehen kann. Bei dieser Antwort geht es jedoch darum, dieses Problemcmd.exe
nicht zu lösenPowerShell
, also fahren wir fort.Verwenden von
cmd.exe
Sie können auf verschiedene Komponenten von Datum und Uhrzeit zugreifen, indem Sie die internen Umgebungsvariablen aufteilen
%date%
und%time%
wie folgt (die genauen Aufteilungswerte hängen wiederum von der in Windows konfigurierten Region ab):%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
Angenommen, Sie möchten, dass Ihre Protokolldatei in diesem Datums- / Zeitformat benannt wird: "
Log_[yyyyMMdd]_[hhmmss].txt
". Sie würden Folgendes verwenden:Führen Sie zum Testen die folgende Befehlszeile aus:
Wenn Sie alles zusammenfügen, um beide
stdout
undstderr
Ihr Skript in eine Protokolldatei mit dem aktuellen Datum und der aktuellen Uhrzeit umzuleiten , verwenden Sie möglicherweise Folgendes als Befehlszeile:Beachten Sie die Verwendung von Anführungszeichen um den Dateinamen, um Instanzen zu behandeln, bei denen eine Datums- oder Zeitkomponente möglicherweise ein Leerzeichen einführt.
In meinem Fall würde die obige Befehlszeile Folgendes erzeugen, wenn das aktuelle Datum / die aktuelle Uhrzeit 10/05/2017 9:05:34 AM wäre:
quelle
Sie können in die Zeilen, die Sie ausgeben möchten, wie folgt in eine Protokolldatei schreiben:
Auf diese Weise können Sie auswählen, welche Befehle ausgegeben werden sollen, wenn Sie nicht alles durchsuchen möchten. Holen Sie sich einfach das, was Sie sehen müssen. Das
>
gibt es in die angegebene Datei aus (erstellt die Datei, wenn sie nicht vorhanden ist, und überschreibt sie, wenn dies der Fall ist). Das>>
wird an die angegebene Datei angehängt (Erstellen der Datei, falls nicht vorhanden, aber an den Inhalt anhängen, falls vorhanden).quelle
Beispiel zum Ausführen eines Programms und Schreiben von stdout und stderr in eine Datei mit Zeitstempel:
Der Schlüssel besteht darin, den gesamten Teil dahinter doppelt zu zitieren
cmd /c
und darin wie gewohnt doppelte Anführungszeichen zu verwenden. Beachten Sie auch, dass das Datum vom Gebietsschema abhängig ist. In diesem Beispiel wird das US-Gebietsschema verwendet.quelle
Dieses Snippet verwendet wmic.exe, um die Datumszeichenfolge zu erstellen. Es wird nicht durch Gebietsschemaeinstellungen entstellt
quelle