有两种可能性。
你忘了把 放在%id%
通话中jstack
。
jstack %id% > jstack.txt
所以整个正确的批处理文件应该是:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
和/或 2. 您确实将它放在代码中(并且忘记在问题中告诉我们)但是当您运行批处理文件时,您按 Enter 键而不是输入 ID(例如 1234)。
发生的事情是这两个错误的结果:
jstack
应该使用您提供的 id 调用它。
但是在您的情况下(根据您在问题中提供的代码),您在没有任何变量的情况下调用它。你写了:
jstack > jstack.txt
因此,当您在jstack
没有变量的情况下运行时,它会输出以下内容:
Terminate batch file Y/N?
您的第二个错误是当程序询问您时您按 Enter 而不是给出值: Enter ID:
. 如果此时您输入了一个 ID,例如 1234,则该%id%
变量将变为该值,在我们的示例中为 1234。但是您没有提供值,而是按 Enter。当您不给变量任何值,并且如果该变量之前未设置为任何其他值,则该变量%id%
将设置为set
命令提示符!!所以现在%id%
设置为Enter ID:
在您调用 jstack 之前,按照批处理文件中的要求在屏幕上回显的内容。
但我怀疑你jstack %id% > jstack.txt
的批处理文件代码中有%id
(并且在问题中错误地省略了它),并且你在没有输入 id 的情况下按了 enter。然后批处理程序回显 id,现在是“输入 ID:”,然后运行jstack Enter ID: > jstack.txt
Jstack 本身回应了输入,遇到错误并要求终止。
而这一切都被写入了 jstack.txt 文件。