Есть две возможности.
Вы забыли поставить %id%в jstackвызове.
jstack %id% > jstack.txt
Таким образом, весь правильный пакетный файл должен быть:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
И / или 2. Вы поместили его в код (и забыли сообщить нам вопрос), но когда вы запустили пакетный файл, вы нажали клавишу Enter вместо ввода идентификатора (скажем, 1234).
То, что происходит, является результатом этих двух ошибок:
jstackпредполагается, что он вызывается с идентификатором, который вы ему предоставили.
Но в вашем случае (в соответствии с кодом, который вы указали в вопросе) вы назвали его без какой-либо переменной. Вы написали:
jstack > jstack.txt
Поэтому, когда вы работаете jstackбез переменных, выдается следующее:
Terminate batch file Y/N?
Ваша вторая ошибка состоит в том, что вы нажали Enter вместо того значения , когда программа спрашивает вас: Enter ID:. Если бы вы в этот момент ввели идентификатор, скажем, 1234, %id%переменная стала бы этим значением, в нашем случае 1234. Но вы НЕ указали значение и вместо этого нажали Enter. Когда вы не даете переменной никакого значения, и если для этой переменной ранее не было установлено ничего, тогда переменная %id%устанавливается на приглашение setкоманды !! Так что теперь %id%установлено значение, Enter ID:которое было отображено на вашем экране в соответствии с запросом в командном файле ДО того, как вы вызвали jstack.
Но я подозреваю, что jstack %id% > jstack.txtу вас в коде командного файла был код %id(и он опущен по ошибке из вопроса), и что вы нажали ввод, не вводя идентификатор. Затем пакетная программа повторила идентификатор, который теперь является «Enter ID:», и затем запустилаjstack Enter ID: > jstack.txt
Jstack сам повторил ввод, обнаружил ошибку и попросил прекратить.
И все это было записано в файл jstack.txt.