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

当前回答

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

其他回答

只是为了保持变量的默认值。按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)。

刚刚添加了

set /p NetworkLocation= Enter name for network?

echo %NetworkLocation% >> netlist.txt

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

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

我不确定这是否适用于所有版本的Windows,但在我拥有的XP机器上,我需要使用以下功能:

set /p Var1="Prompt String"

如果没有引号中的提示字符串,我会根据文本得到不同的结果。

试试这个:

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

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

例如:

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