我有一个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)? 

当前回答

语法如下: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%语法

其他回答

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

变量周围的美元符号在我的Vista机器上不起作用,但是百分号可以。 还要注意,“set”行上的尾随空格将出现在提示符和用户输入之间。

与SET不同,SETX没有文档化的/提示参数。

如果需要提示一个在重新启动后仍然有效的环境变量,可以使用SETX存储它。

在重新启动命令提示符之前,SETX创建的变量将不可用。然而,你可以巧妙地SETX一个已经被SET的变量,即使它有相同的名字。

这在Windows 8.1 Pro中很适用:

set /p UserInfo= "What is your name?  "
setx UserInfo "%UserInfo%"

(现有变量周围的引号是必要的。)

这个过程允许您在当前会话期间使用临时set创建的变量,并允许您在重新启动计算机或重新启动CMD提示符时重用setx创建的变量。

(经过编辑以正确格式化代码段落。)

我有一个小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 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%语法