我写了以下.bat脚本
@echo off
@rem set variables
set CURRENT_DIR=%cd%
set SCRIPT_DIR=%~dp0%
set Program Files=%Program Files:Program Files=Progra~1%
:input
set INPUT=
echo Following are the installation choices you have:
echo 1. Choice1
echo 2. Choice2
echo 3. Choice3
set /P INPUT=Please select any of the above choice (1to 3) : %=%
echo input is %INPUT%
if "%INPUT%"=="" goto input
if "%INPUT%"=="1" (
echo Choice 1 selected
goto QUITNOW
)
if "%INPUT%"=="2" (
echo Choice 2 selected
set /p INPUT_1=Please enter input 1: %=%
echo input_1 is %INPUT_1%
goto QUITNOW
)
if "%INPUT%"=="3" (
echo Choice 3 selected
set /p input_3= Please enter input_3: %=%
echo %input_3%
)
:QUITNOW
cd %CURRENT_DIR%
@echo on
首先,当它要求我选择选项并且我输入2时,它将INPUT变量设置为2,如果阻止则将其设置为秒。如果再次阻止它要求输入(INPUT_1),我确实输入输入字但看起来这次没有设置INPUT_1变量。有人知道我在哪里做错了。使用我的输入
输出脚本C:\Documents and Settings\Administrator\Desktop>scriptA.bat
Following are the installation choices you have:
1. Choice1
2. Choice2
3. Choice3
Please select any of the above choice (1to 3) : 2
input is 2
Choice 2 selected
Please enter input 1: failingHere
input_1 is
C:\Documents and Settings\Administrator\Desktop>
因此,如果您观察到它没有打印“failingHere”输入。如果您需要任何进一步的信息,请帮助并告诉我。
答案 0 :(得分:4)
你的问题在于:
if "%INPUT%"=="2" (
echo Choice 2 selected
set /p INPUT_1=Please enter input 1: %=%
echo input_1 is %INPUT_1%
goto QUITNOW
)
在运行任何之前,对整个块进行评估(对于环境变量)。这意味着%INPUT_1%
在被设置之前被评估。
你需要做的是:
setlocal enableextensions enabledelayedexpansion
位于脚本的顶部(并在退出前endlocal
)并使用延迟扩展符号:
if "%INPUT%"=="2" (
echo Choice 2 selected
set /p INPUT_1=Please enter input 1: %=%
echo input_1 is !INPUT_1!
goto QUITNOW
)
您可以使用以下脚本查看此操作:
@setlocal enableextensions enabledelayedexpansion
@echo off
set xx=1
if %xx%==1 (
set xx=2
echo %xx%
echo !xx!
)
endlocal
输出:
1
2
因为在读取整个%xx%
语句时评估if
,而当行时评估!xx!
时评估{{1}}执行。
答案 1 :(得分:0)
您使用了ms-dos / dos-batch标记,但我认为在MS-DOS中已经没有set / p。我以为它会被添加到Windows命令提示符(cmd)中。 如果没有,如果我当时知道它,它会使我基于批处理的文本冒险更容易。 :)
答案 2 :(得分:0)
你正在使用/ p而不是/ P.改变它并且会起作用。
if "%INPUT%"=="2" (
echo Choice 2 selected
set /P INPUT_1=Please enter input 1: %=%
echo input_1 is %INPUT_1%
goto QUITNOW
)