Jednym z najbardziej użytecznych sposobów rejestrowania i rozwiązywania problemów związanych z działaniem poleceń lub zadań wsadowych uruchamianych w systemie Windows jest przekierowanie wyjścia do pliku.
Jest jednak kilka różnych sposobów przekierowania wyjścia wiersza poleceń do pliku. Opcja, którą wybierzesz, zależy od tego, jak chcesz przeglądać dane wyjściowe swoich poleceń.
Jak działa wyjście wiersza poleceń systemu Windows
Gdy wpisujesz polecenie w konsoli Windows (wierszu poleceń), dane wyjściowe z tego polecenia trafiają do dwóch oddzielnych strumieni.
- STDOUT: Standard Out to miejsce, gdzie trafiają wszelkie standardowe odpowiedzi z poleceń. Na przykład standardową odpowiedzią dla polecenia DIR jest lista plików wewnątrz katalogu.
- STDERR: Standard Error jest miejscem, gdzie trafiają wszelkie komunikaty o błędach, jeśli wystąpił problem z poleceniem. Na przykład, jeśli nie ma żadnych plików w katalogu, DIR polecenia będzie wyjście „File Not Found” do Standard Error stream.
Możesz przekierować wyjście do pliku w systemie Windows dla obu tych output streams.
Redirect Standard Output Write to New File
Istnieją dwa sposoby można przekierować standardowe wyjście polecenia do pliku. Pierwszym z nich jest wysłanie wyjścia polecenia do nowego pliku przy każdym uruchomieniu polecenia.
Aby to zrobić, otwórz wiersz poleceń i wpisz:
dir test.exe > myoutput.txt
Znak > mówi konsoli, aby wypisała STDOUT do pliku o podanej przez ciebie nazwie.
Po uruchomieniu tego polecenia zauważysz, że w oknie poleceń nie ma żadnej odpowiedzi poza błędem, że plik nie istnieje.
Dzieje się tak, ponieważ standardowe wyjście dla tego polecenia zostało przekierowane do pliku o nazwie myoutput.txt. Plik ten istnieje teraz w tym samym katalogu, w którym wykonano polecenie. Standardowe wyjście błędu nadal jest wyświetlane tak jak zwykle.
Uwaga: Uważaj, aby zmienić katalog aktywny dla wiersza poleceń przed uruchomieniem polecenia. W ten sposób będziesz wiedział, gdzie przechowywane są pliki wyjściowe.
Możesz zobaczyć standardowe wyjście, które trafiło do pliku, wpisując „myoutput.txt” w oknie poleceń. Spowoduje to otwarcie pliku tekstowego w domyślnej przeglądarce plików tekstowych. Dla większości ludzi jest to zwykle Notepad.exe.
Kolejne uruchomienie tego samego polecenia spowoduje usunięcie poprzedniego pliku wyjściowego. Nowy plik wyjściowy zostanie odtworzony z danymi wyjściowymi ostatniego polecenia.
Przekieruj zapisy wyjścia standardowego do tego samego pliku
Co zrobić, jeśli nie chcesz nadpisywać tego samego pliku? Inną opcją jest użycie >> zamiast > do przekierowania do pliku wyjściowego. W tym przykładzie wpiszesz:
dir test.exe >> myoutput.txt
Zobaczysz to samo wyjście (tylko błąd).
Ale w tym przypadku, zamiast nadpisywać plik wyjściowy, to polecenie dołącza nowe dane wyjściowe do istniejącego pliku wyjściowego.
Za każdym razem, gdy uruchomisz polecenie i dołączysz wyjście do pliku, zapisze ono nowe standardowe wyjście na końcu istniejącego pliku.
Przekierowanie standardowego błędu do pliku
W ten sam sposób, w jaki można przekierować zapisy standardowego wyjścia do pliku, można również wyprowadzić strumień standardowego błędu do pliku.
Aby to zrobić, należy dodać 2> na końcu polecenia, a następnie plik błędu wyjścia, który chcesz utworzyć.
W tym przykładzie wpiszesz polecenie:
dir test.exe > myoutput.txt 2> output.err
W ten sposób standardowy strumień wyjściowy zostanie wysłany do pliku myoutput.txt, a standardowy strumień błędów do pliku output.err. W rezultacie żaden strumień wyjściowy nie zostanie wyświetlony w oknie konsoli.
Możesz jednak zobaczyć komunikaty o błędach, wpisując output.err. Spowoduje to otwarcie pliku w domyślnej przeglądarce plików tekstowych.
Jak widać, wszystkie komunikaty o błędach polecenia są wyprowadzane do pliku błędów. Podobnie jak w przypadku standardowego wyjścia, możesz użyć >> zamiast tego, aby dołączyć błąd do błędów z poprzednio uruchomionych poleceń.
Przekieruj wszystkie wyjścia do tego samego pliku
Wszystkie powyższe podejścia skutkują wieloma plikami. Jeden plik jest dla standardowego strumienia wyjściowego, a drugi dla standardowego strumienia błędów.
Jeśli chcesz dołączyć oba te wyjścia do tego samego pliku, też możesz to zrobić. Aby to zrobić, wystarczy przekierować wszystkie wyjścia do tego samego pliku za pomocą następującego polecenia.
dir test.exe 1> myoutput.txt 2>&1
Tak działa to polecenie:
- Standardowe wyjście jest kierowane do pliku wyjściowego identyfikowanego przez numer wyjścia 1.
- Standardowe wyjście błędu identyfikowane przez numer 2 jest przekierowywane do pliku wyjściowego identyfikowanego przez numer 1.
Dołączy to wyjście błędu do końca standardowego wyjścia.
Jest to użyteczny sposób na zobaczenie całego wyjścia dla dowolnego polecenia w jednym pliku.
Wyciszanie strumieni standardowego lub błędnego wyjścia
Możesz także wyłączyć standardowe wyjście lub standardowy błąd, przekierowując wyjście do NUL zamiast do pliku.
Na podstawie powyższego przykładu, jeśli chcesz tylko Standardowe Wyjście i żadnego Standardowego Błędu, możesz użyć następującego polecenia:
dir test.exe 1> myoutput.txt 2>nul
Wynikiem tego będzie taki sam plik wyjściowy jak w pierwszym przykładzie powyżej, gdzie przekierowałeś tylko Standardowe Wyjście, ale z tym poleceniem błąd nie będzie echem w konsoli. Nie utworzy również pliku dziennika błędów.
Jest to przydatne, jeśli nie przejmujesz się żadnymi błędami i nie chcesz, aby stały się uciążliwe.
Możesz wykonać dowolne z tych samych poleceń wyjściowych powyżej z wnętrza pliku BAT, a wyjście z tej linii trafi do pliku wyjściowego, który określisz. Jest to użyteczny sposób na sprawdzenie, czy któreś z poleceń w pliku BAT miało jakieś błędy, gdy próbowało się uruchomić.