Есть две возможности.
Вы забыли поставить %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.