Korzystam ze skryptu wiersza polecenia, aby dostosować wiele ustawień na komputerze. Chciałbym jednak, aby całe dane wyjściowe były również logowane do pliku .txt lub .log.
Kiedy wykorzystam swoją podstawową wiedzę o systemie rejestrowania, umieści dane wyjściowe w pliku, ale nie wykona go. W moim przypadku musiałbym go wykonać, a następnie zalogować się do pliku w celu późniejszego wykorzystania.
Czy ktoś mógłby mi powiedzieć, jak to zrobić?
Z góry dziękuję! Dempsey
command-line
logging
cmd.exe
Dempsey FoxDie Van Assche
źródło
źródło
Odpowiedzi:
Jeśli pytanie wymaga „wykonania” skryptu, a cały plik wsadowy zostanie zapisany w pliku dziennika w systemie Windows 8.1, oto prosta odpowiedź:
Uwzględnij to na początku pliku wsadowego ...
źródło
W swoim pytaniu wspominasz:
Ponieważ mówisz, że program działa, a jego dane wyjściowe są umieszczane w pliku, pomyślałem, że mógłbyś oznaczać „wyświetlany” , zamiast „wykonywany” .
Jeśli nie o to ci chodziło, to prawdopodobnie pomogłoby, gdyby to zostało wyjaśnione lepiej, być może z pewnymi przykładowymi danymi wyjściowymi.
W każdym razie zamieszczam tę odpowiedź na wypadek, gdyby inni uważali to pytanie / odpowiedź za pomocną.
Zasadniczo brzmi to tak, jakbyś chciał, aby wynik skryptu był przechwytywany do pliku, a także aby był w stanie zobaczyć wynik skryptu na ekranie podczas działania skryptu.
(wersja tl; dr: użyj wintee , jak poniżej:
script 2>&1 | wtee logfile.txt
)W tym poście użyję małego testowego pliku wsadowego, ale twój skrypt może być tak duży i skomplikowany lub tak prosty, jak potrzebujesz:
Oto co się stanie, gdy uruchomię ten skrypt wsadowy:
Zauważ, że w skrypcie testowym pierwsze wykonanie polecenia „dir” zakończyło się powodzeniem, a drugie nie powiedzie się. Robię to tylko, aby pokazać, co się stanie z „komunikatami o błędach” po uruchomieniu skryptu.
Jeśli uruchomię skrypt i użyję przekierowania ( „>” ), aby przechwycić dane wyjściowe, zobaczę to
Zauważ, że komunikat o błędzie „Nie znaleziono pliku” był wyświetlany na ekranie podczas uruchamiania skryptu i nie został faktycznie przechwycony do pliku. Jest tak, ponieważ „>” przechwytuje „normalne wyjście”, które zostało wysłane do strumienia STDOUT. „Komunikaty o błędach” są zwykle wysyłane do strumienia STDERR.
Aby przechwycić „normalne wyjście” i „komunikaty o błędach”, musisz również przechwycić strumień STDERR, który jest oznaczony przez „2” w „2> i 1” w poleceniu tutaj:
W unixie jest standardowe polecenie:
"tee"
Za pomocą polecenia „tee” można przechwytywać dane wyjściowe z programu, a także wyświetlać dane wyjściowe na ekranie w tym samym czasie.
Polecenie „tee” nie jest standardowe w systemie Windows, ale możesz pobrać bezpłatną wersję „tee” dla systemu Windows tutaj: wintee . Pobrany program o nazwie:
"wtee.exe"
.Korzystasz z programu „wtee.exe”, jak pokazano poniżej.
Spowoduje to przechwycenie wyniku skryptu do pliku o nazwie
"log.txt"
tak jak poprzednio, a także wyświetlenie wyniku na ekranie podczas działania skryptu:źródło
Ten skrypt wykona ls i zapisze dane wyjściowe w pliku o nazwie log.txt:
Dziennik nie zostanie wykonany.
źródło