Istnieją dwie możliwości.
Zapomniałeś umieścić %id%
w jstack
zaproszeniu.
jstack %id% > jstack.txt
Tak więc cały poprawny plik wsadowy powinien być:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
I / lub 2. Umieściłeś go w kodzie (i zapomniałeś powiedzieć nam w pytaniu), ale kiedy uruchomiłeś plik wsadowy, nacisnąłeś klawisz Enter zamiast wpisywać identyfikator (powiedzmy 1234).
To, co się dzieje, jest wynikiem tych dwóch błędów:
jstack
należy go wywołać z podanym identyfikatorem.
Ale w twoim przypadku (zgodnie z kodem podanym w pytaniu) wywołałeś go bez żadnej zmiennej. Napisałeś:
jstack > jstack.txt
Więc kiedy uruchamiasz jstack
bez zmiennej, wyświetla następujące informacje:
Terminate batch file Y/N?
Twój Drugim błędem jest to, że został naciśnięty przycisk Enter zamiast dawać wartość, gdy program zapytałem: Enter ID:
. Gdybyś w tym miejscu wprowadziłby identyfikator, powiedzmy 1234, %id%
zmienna stałaby się tą wartością, w naszym przypadku 1234. Ale NIE podałeś wartości, a zamiast tego nacisnąłeś Enter. Jeśli nie podasz zmiennej żadnej wartości, a jeśli ta zmienna nie była wcześniej ustawiona na nic innego, wówczas zmienna %id%
zostanie ustawiona na wiersz set
polecenia !! Więc teraz %id%
jest ustawione, Enter ID:
które zostało powtórzone na ekranie zgodnie z żądaniem w pliku wsadowym PRZED wywołaniem jstack.
Ale podejrzewam, że MASZ jstack %id% > jstack.txt
w swoim pliku wsadowym kod z %id
(i pomyłkowo go pominąłeś w pytaniu) i że wcisnąłeś enter bez wpisywania identyfikatora. Program wsadowy następnie powtórzył identyfikator, który jest teraz „Wprowadź identyfikator:”, a następnie uruchomił sięjstack Enter ID: > jstack.txt
Sam Jstack powtórzył dane wejściowe, napotkał błąd i poprosił o zakończenie.
Wszystko to zostało zapisane w pliku jstack.txt.