我有一个Windows .bat文件,我想接受用户的输入,然后使用该输入的结果作为调用额外命令的一部分。
例如,我想从用户那里接受一个进程ID,然后针对该ID运行jstack,将jstack的调用结果放入一个文件。然而,当我尝试这样做时,它并不工作。
以下是我的样本bat文件内容。
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
这里是jstack.txt中显示的内容。
输入ID。终止批处理作业(Y/N)?
试试这个:
@echo off
set /p id="Enter ID: "
然后你可以用%id%
作为另一个批处理文件的参数,如jstack %id%
。
例如:
set /P id=Enter id:
jstack %id% > jstack.txt
语法是这样的。set /p variable=[string]
。
查看http://commandwindows.com/batch.htm 或 http://www.robvanderwoude.com/userinput.php,以更深入地了解不同版本的Windows操作系统批处理文件的用户输入。
一旦你设置了你的变量,你就可以按以下方式来使用它。
@echo off
set /p UserInputPath=What Directory would you like?
cd C:\%UserInputPath%
注意%VariableName%
的语法
set /p choice= "Please Select one of the above options :"
echo '%choice%'
=
后面的空格非常重要。
SETX并没有像SET一样,有记录的/prompt参数。
如果你需要提示一个可以在重启后继续使用的环境变量,你可以使用SETX来存储它。
在重启命令提示符之前,由SETX创建的变量将无法使用。 然而,整洁的是,你可以SETX一个已经被SET的变量,即使它有相同的名称。
在Windows 8.1 Pro中,这对我来说是可行的。
set /p UserInfo= "What is your name? "
setx UserInfo "%UserInfo%"
(现有变量周围的引号是必要的。) 在此过程中,您可以在当前会话中使用临时的SET创建的变量,并允许您在重新启动计算机或重新启动CMD提示符时重新使用SETX创建的变量。
这个过程允许你在当前会话中使用临时创建的SET变量,并允许你在重新启动计算机或重新启动CMD提示时重新使用SETX创建的变量。
(经编辑,代码段落格式正确。)
@echo off
:start
set /p var1="Enter first number: "
pause
有两种可能。
jstack
调用中加入%id%
。jstack %id% > jstack.txt
所以整个正确的批处理文件应该是。
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
和/或2。 你确实把它放在了代码中(忘记在问题中告诉我们了),但是当你运行批处理文件时,你按了回车键,而不是输入一个ID(比如1234)。
发生的事情就是这两个错误的结果。
jstack
应该用你提供的id来调用。
但在你的情况下(根据你在问题中提供的代码),你在没有任何变量的情况下调用了它。 你写道:"{{59305}}。
jstack > jstack.txt
因此,当你在没有变量的情况下运行jstack
时,它的输出如下。
Terminate batch file Y/N?
你的第二个错误是,你按了回车键,而不是在程序问你的时候给一个值。
输入ID。
.
如果你在这时输入一个ID,比如1234,%id%
变量就会变成那个值,在我们的例子中就是1234。
但是你没有提供一个值,而是按了Enter。
当你不给变量任何值时,如果这个变量之前没有被设置为其他任何值,那么变量%id%
就会被设置为set
命令的提示值!
所以现在%id%
被设置为输入ID:
,这是在你调用jstack之前,按照批处理文件中的要求在你的屏幕上回响的。
但我怀疑你确实有jstack %id% > jstack.txt
在你的批处理文件代码里有%id
(在问题中错误地省略了它),你没有输入id就按了回车键。
然后批处理程序就呼应了id,现在是"输入id:",然后运行jstack输入id。 >.jstack.txt
。
jstack.txt`。
Jstack自己对输入的内容进行了回声,遇到了错误,要求终止。 而这一切都被写进了jstack.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
刚刚添加了
set /p NetworkLocation= Enter name for network?
echo %NetworkLocation% >> netlist.txt
序列到我的netsh批处理作业。 它现在显示我响应的位置为该样本的点。 我连续>>。 输出文件,所以我现在知道"家","工作","星巴克"等。 寻找清晰的空气,我可以排放最低的使用通道,以及周围是否有5个或只是所有2.4 MHz的WLAN。