Jak w systemie Windows Server 2008 przechwycić dane wyjściowe skryptu uruchamianego za pomocą harmonogramu zadań systemu Windows?
Testuję dość długi skrypt wsadowy do drukowania niestandardowego i do celów debugowania chciałbym co noc widzieć wszystkie jego wyniki.
batch-file
scheduled-tasks
Mechaflash
źródło
źródło
Odpowiedzi:
Spróbuj tego jako polecenia w Harmonogramie zadań:
źródło
cmd /c "path with spaces/command.cmd > file.txt"
jeśli masz spacje.2>&1
Z odpowiedzią Iwana również idzie wewnątrz cudzysłowów.cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
Z stderr (gdzie trafia większość błędów):
źródło
Aby uzupełnić odpowiedź @ user2744787, oto zrzut ekranu pokazujący, jak używać
cmd
argumentów w zaplanowanym zadaniu:Program / scenariusz:
cmd
Dodaj argumenty:
/c run_with_default_port.bat > IMQuantWebServices.log
źródło
>>
Dołączy plik dziennika, a nie zastępowanie go za każdym razem.2>&1
Będzie również wysłać błędy do pliku dziennika.źródło
Możesz mieć plik debug.cmd, który wywołuje yourscript.cmd
planujesz debug.cmd zamiast yourscript.cmd
źródło
Użyj
cmd.exe
procesora poleceń, aby utworzyć nazwę pliku ze znacznikiem czasu, aby zarejestrować dane wyjściowe zaplanowanego zadaniaAby oprzeć się na odpowiedziach innych osób, może być konieczne utworzenie pliku wyjściowego z datą i / lub godziną osadzoną w nazwie pliku. Możesz to zrobić za pomocą
cmd.exe
procesora poleceń.Uwaga: Ta technika pobiera ciąg wyjściowy wewnętrznych zmiennych środowiskowych systemu Windows i dzieli je na kawałki na podstawie pozycji znaku. Z tego powodu dokładne wartości podane w poniższych przykładach mogą nie być poprawne dla używanego regionu systemu Windows. Ponadto, przy niektórych ustawieniach regionalnych, niektóre składniki daty lub godziny mogą wprowadzić spację do utworzonej nazwy pliku, gdy ich wartość jest mniejsza niż 10. Aby złagodzić ten problem, należy umieścić nazwę pliku w cudzysłowie, tak aby wszelkie niezamierzone spacje w pliku name nie zepsuje linii poleceń, którą tworzysz. Eksperymentuj i znajdź to, co najlepiej pasuje do Twojej sytuacji.
Pamiętaj, że
PowerShell
jest potężniejszy niżcmd.exe
. Jednym ze sposobów jest to, że jest bardziej wydajny, ponieważ radzi sobie z różnymi regionami systemu Windows. Ale ta odpowiedź dotyczy rozwiązania tego problemu za pomocącmd.exe
, a niePowerShell
, więc kontynuujemy.Za pomocą
cmd.exe
Możesz uzyskać dostęp do różnych składników daty i godziny, wycinając wewnętrzne zmienne środowiskowe
%date%
i%time%
, w następujący sposób (ponownie, dokładne wartości podziału zależą od regionu skonfigurowanego w systemie Windows):%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
Załóżmy, że chcesz, aby plik dziennika został nazwany przy użyciu tego formatu daty / godziny: „
Log_[yyyyMMdd]_[hhmmss].txt
”. Użyłbyś:Aby to przetestować, uruchom następujący wiersz poleceń:
Łącząc to wszystko razem, aby przekierować zarówno
stdout
istderr
ze skryptu do pliku dziennika o nazwie z bieżącą datą i godziną, użyj poniższego wiersza poleceń:Zwróć uwagę na użycie cudzysłowów wokół nazwy pliku w celu obsługi wystąpień składnika daty lub godziny może wprowadzić znak spacji.
W moim przypadku, jeśli bieżąca data / godzina to 10/05/2017 9:05:34 AM, powyższa linia poleceń wygeneruje:
źródło
Możesz pisać do pliku dziennika w wierszach, które chcesz wyprowadzić w następujący sposób:
W ten sposób możesz wybrać, które polecenia mają być wyświetlane, jeśli nie chcesz przeglądać wszystkiego, po prostu uzyskaj to, co chcesz zobaczyć.
>
Wyjście będzie to do pliku podanego (tworząc plik, jeśli nie istnieje i zastąpieniem go, jeśli to robi).>>
Dołączy do pliku podanego (tworząc plik, jeśli nie istnieje, ale dodanie do treści, jeśli nie).źródło
Przykład jak uruchomić program i zapisać stdout i stderr do pliku z datownikiem:
Kluczową częścią jest podwójne cytowanie całej części z tyłu,
cmd /c
a wewnątrz niej jak zwykle użyj podwójnych cudzysłowów. Należy również pamiętać, że data jest zależna od ustawień regionalnych, w tym przykładzie działa przy użyciu ustawień regionalnych dla Stanów Zjednoczonych.źródło
Ten fragment kodu używa wmic.exe do zbudowania ciągu daty. Nie jest zniekształcona przez ustawienia regionalne
źródło