365 windows prompt batch-file
我有一个Windows .bat文件,我想接受用户输入,然后使用该输入的结果作为调用其他命令的一部分.
例如,我想接受来自用户的进程ID,然后针对该ID运行jstack,将jstack调用的结果放入文件中.但是,当我尝试这个时,它不起作用.
这是我的样本bat文件内容:
@echo off
set /p id=Enter ID:
echo %id%
jstack > jstack.txt
Run Code Online (Sandbox Code Playgroud)
这是jstack.txt中显示的内容:
Enter ID: Terminate batch job (Y/N)?
Ins*_*oup 419
试试这个:
@echo off
set /p id="Enter ID: "
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其%id%
用作另一个批处理文件的参数jstack %id%
.
例如:
set /P id=Enter id:
jstack %id% > jstack.txt
Run Code Online (Sandbox Code Playgroud)
jay*_*den 97
语法是这样的: 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%
Run Code Online (Sandbox Code Playgroud)
注意%VariableName%
语法
Dan*_*iel 31
我不确定所有版本的Windows是否都是这种情况,但是在我拥有的XP机器上,我需要使用以下内容:
set /p Var1="Prompt String"
Run Code Online (Sandbox Code Playgroud)
如果没有引号中的提示字符串,我会根据文本得到各种结果.
han*_*man 18
set /p choice= "Please Select one of the above options :"
echo '%choice%'
Run Code Online (Sandbox Code Playgroud)
后面的空间=
非常重要.
小智 14
@echo off
set /p input="Write something, it will be used in the command "echo""
echo %input%
pause
Run Code Online (Sandbox Code Playgroud)
如果我得到你想要的,这很好.您也可以在其他命令中使用%input%.
@echo off
echo Write something, it will be used in the command "echo"
set /p input=""
cls
echo %input%
pause
Run Code Online (Sandbox Code Playgroud)
npo*_*aka 10
您还可以尝试使用userInput.bat,它使用 html 输入元素。
这会将输入分配给值 jstackId:
call userInput.bat jstackId
echo %jstackId%
Run Code Online (Sandbox Code Playgroud)
这只会打印输入值,最终您可以使用以下命令捕获该输入值FOR /F
:
call userInput.bat
Run Code Online (Sandbox Code Playgroud)
小智 8
@echo off
:start
set /p var1="Enter first number: "
pause
Run Code Online (Sandbox Code Playgroud)
SETX没有记录/提示参数,因为有SET.
如果需要提示在重新启动后仍然存在的环境变量,可以使用SETX来存储它.
在重新启动命令提示符之前,由SETX创建的变量将不可用.但是,整齐地,您可以SETX一个已经设置过的变量,即使它具有相同的名称.
这适用于Windows 8.1 Pro:
set /p UserInfo= "What is your name? "
setx UserInfo "%UserInfo%"
Run Code Online (Sandbox Code Playgroud)
(现有变量周围的引号是必要的.)
此过程允许您在当前会话期间使用临时SET创建的变量,并允许您在重新启动计算机或重新启动CMD提示时重用SETX创建的变量.
(编辑正确格式化代码段落.)
小智 5
在为客户准备PC时,我使用了一个cmd:它将调用用户进行输入,然后将PC重命名为该cmd。
@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
Run Code Online (Sandbox Code Playgroud)
有两种可能性。
您忘记%id%
了jstack
拨打电话。
jstack %id% > jstack.txt
Run Code Online (Sandbox Code Playgroud)因此,整个正确的批处理文件应为:
@echo off
set /p id=Enter ID:
echo %id%
jstack %id% > jstack.txt
Run Code Online (Sandbox Code Playgroud)
和/或2.您确实将其放入代码中(并且忘记在问题中告诉我们),但是在运行批处理文件时,您按Enter键而不是输入ID(例如1234)。
这是这两个错误的结果:
jstack
应该使用您提供的ID进行调用。
但是在您的情况下(根据问题中提供的代码),您没有任何变量地调用了它。你写了:
jstack > jstack.txt
Run Code Online (Sandbox Code Playgroud)
因此,当您jstack
不使用任何变量运行时,它将输出以下内容:
Terminate batch file Y/N?
Run Code Online (Sandbox Code Playgroud)
您的第二个错误是,当程序询问您:时,您按Enter而不是提供一个值 Enter ID:
。如果您此时将输入一个ID,例如1234,则该%id%
变量将成为该值,在我们的例子中为1234。但是您没有提供值,而是按Enter键。如果您不给变量任何值,并且如果该变量之前未设置为其他任何值,则该变量%id%
将设置为set
命令提示符!因此,现在%id%
将其设置为Enter ID:
在调用jstack之前,按批处理文件中的请求在屏幕上回显的位置。
但是我怀疑您的DID jstack %id% > jstack.txt
在批处理文件代码中带有%id
(并且从问题中错误地将其省略了),并且您按回车时没有输入id。然后,批处理程序回显该ID(现在为“输入ID:”),然后运行jstack Enter ID: > jstack.txt
Jstack本身回显了输入,遇到一个错误并要求终止。
所有这些都被写入了jstack.txt文件。
归档时间: |
|
查看次数: |
992945 次 |
最近记录: |