Existem duas possibilidades.
Você esqueceu de fazer %id%
a jstack
ligação.
jstack %id% > jstack.txt
Portanto, todo o arquivo em lotes correto deve ser:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
E / ou 2. Você o inseriu no código (e esqueceu de nos dizer a pergunta), mas quando executou o arquivo em lotes, pressionou a tecla Enter em vez de digitar um ID (por exemplo, 1234).
O que está acontecendo é o resultado desses dois erros:
jstack
deve ser chamado com o ID que você fornece.
Mas no seu caso (de acordo com o código que você forneceu na pergunta), você o chamou sem nenhuma variável. Você escreveu:
jstack > jstack.txt
Portanto, quando você executa jstack
sem variável, gera o seguinte:
Terminate batch file Y/N?
Seu segundo erro é que você pressionado Enter em vez de dar um valor quando o programa que você perguntou: Enter ID:
. Se você inserisse um ID nesse ponto, digamos 1234, a %id%
variável se tornaria esse valor, no nosso caso 1234. Mas você NÃO forneceu um valor e, em vez disso, pressionou Enter. Quando você não atribui nenhum valor à variável, e se essa variável não estava definida para mais nada antes, a variável %id%
é configurada para o prompt do set
comando !! Então agora %id%
está definido como o Enter ID:
que foi ecoado na tela, conforme solicitado no arquivo em lotes ANTES de você chamar o jstack.
Mas suspeito que você tenha o jstack %id% > jstack.txt
código do arquivo em lotes com o %id
(e omitido por engano da pergunta) e que você pressione enter sem digitar um ID. O programa em lote repetiu o ID, que agora é "Enter ID:", e depois executoujstack Enter ID: > jstack.txt
O próprio Jstack ecoou a entrada, encontrou um erro e pediu para terminar.
E tudo isso foi escrito no arquivo jstack.txt.