我有一个Windows .bat文件,我想接受用户输入,然后使用输入的结果作为额外命令调用的一部分。

例如,我想从用户那里接受一个进程ID,然后针对这个ID运行jstack,将jstack调用的结果放到一个文件中。然而,当我尝试这样做时,它不起作用。

以下是我的示例bat文件内容:

@echo off
set /p id=Enter ID: 
echo %id%
jstack > jstack.txt

下面是在jstack.txt中显示的内容:

Enter ID: Terminate batch job (Y/N)? 

当前回答

试试这个:

@echo off
set /p "id=Enter ID: "

然后可以使用%id%作为另一个批处理文件的参数,例如jstack %id%。

例如:

set /P id=Enter id: 
jstack %id% > jstack.txt

其他回答

@echo off
:start
set /p var1="Enter first number: "
pause

刚刚添加了

set /p NetworkLocation= Enter name for network?

echo %NetworkLocation% >> netlist.txt

序列到我的netsh批处理作业。它现在显示我响应的位置作为样本点。我连续>>输出文件,所以我现在知道“家”,“工作”,“星巴克”等。寻找干净的空气,我可以屋檐最低使用频道,是否有5或只是所有2.4兆赫的wlan周围。

有两种可能。

您忘记在jstack调用中放入%id%。 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? 

Your second mistake is that you pressed Enter instead of giving a value when the program asked you: Enter ID:. If you would have put in an ID at this point, say 1234, the %id% variable would become that value, in our case 1234. But you did NOT supply a value and instead pressed Enter. When you don't give the variable any value, and if that variable was not set to anything else before, then the variable %id% is set to the prompt of the set command!! So now %id% is set to Enter ID: which was echoed on your screen as requested in the batch file BEFORE you called the jstack.

但是我怀疑您的批处理文件代码中确实有jstack %id% > jstack.txt,其中有%id(并且在问题中错误地省略了它),并且您没有键入id就按下了enter键。批处理程序然后返回id,现在是“Enter id:”,然后运行jstack Enter id: > jstack.txt

Jstack本身回显输入,遇到错误并要求终止。 所有这些都被写入了jstack.txt文件。

只是为了保持变量的默认值。按Enter键使用最近运行的.bat的默认值:

@echo off
set /p Var1=<Var1.txt
set /p Var1="Enter new value ("%Var1%") "
echo %Var1%> Var1.txt

rem YourApp %Var1%

在第一次运行时,忽略关于缺少变量初始值的文件的消息(或者手动创建Var1.txt)。

我有一个小cmd我使用时,准备pc客户端:它调用用户输入,并重命名pc。

@ECHO "remember to run this as admin."
@ECHO OFF
SET /P _inputname= Please enter an computername:
@ECHO Du intastede "%_inputname%"
@ECHO "The pc will restart after this"
pause
@ECHO OFF
wmic computersystem where name="%COMPUTERNAME%" call rename name="%_inputname%"

shutdown -r -f