set /p input= Please type the favorite color here:
if /i "%input%"=="green and yellowz" goto :GREEN
if %input%==red goto RED
if %input%==yellow goto YELLOW
if %input%==black goto BLACK
Rem Check to see if input is green, red, yellow, or black, if it is one of
these then it will jump to the related point below.
if not "%input%"==black goto ANOTHER
如果用户输入带空格的内容,例如“不相关” .Bat文件退出自己,有没有办法接受用户输入,即使它 中有空格,并不是我声明的选项之一 他们选择? 通过以下评论解决:
set /p input= Please type the favorite color here:
if /i "%input%"=="green and yellowz" goto :GREEN
if /i "%input%"=="red" goto RED
if /i "%input%"=="yellow" goto YELLOW
if /i "%input%"=="black" goto BLACK
Rem Check to see if input is green, red, yellow, or black, if it is one of
these then it will jump to the related point below.
if not "%input%"=="black" goto ANOTHER
答案 0 :(得分:0)
命令行:
if %input%==red goto RED
在预处理阶段使用用户输入black white
修改为:
if black white == red goto RED
执行批处理文件的Windows命令解释程序cmd.exe
需要在此命令行中使用内部命令 IF 在第一个和第三个参数字符串之间存在有效的运算符。
由于没有使用双引号,第一个参数字符串在环境变量扩展black
之后,第二个参数字符串是white
,它不是支持的运算符,而是在命令提示符下运行时的输出窗口if /?
。这会导致错误消息:
此时白色出人意料。
由于语法错误,下一个Windows命令解释程序退出批处理,因为在命令提示符窗口中运行批处理文件时可以看到它,而不是双击批处理文件。
上面的命令行以not related
作为输入字符串导致执行命令行:
if not related == red goto RED
这是偶然的有效 IF 条件,比较字符串related
不等于字符串red
,这是真的,因此{{1执行。
使用此批次代码:
goto RED
首先删除可能已存在的环境变量:EnterColor
set "input="
set /P "input=Please type the favorite color here: "
if not defined input goto EnterColor
setlocal EnableDelayedExpansion
rem Check to see if input is green, red, yellow, or black. If it
rem is one of these then it will jump to the related point below.
if /I "!input!" == "green and yellow" endlocal & goto GREEN
if /I "!input!" == "red" endlocal & goto RED
if /I "!input!" == "yellow" endlocal & goto YELLOW
if /I "!input!" == "black" endlocal & goto BLACK
endlocal
goto ANOTHER
,以确保在用户输入任何内容时,此环境变量不会保留其值。
然后提示用户输入字符串。用户可以自由输入任何内容或任何字符串,包括包含空格或input
的字符串以及任何组合中的其他字符,这意味着用户可以输入一个字符串,该字符串接下来可以在命令中立即进行环境变量扩展line导致执行批处理文件中根本没有写入的一个或多个命令。
因此,启用了延迟环境变量扩展并在以下字符串比较中使用,以防止修改由用户输入的字符串在脚本中编写的命令行。
答案 1 :(得分:0)
由于green
似乎优先于您提交的代码中的yellow
,因此您可能会发现以下语法和结构更适合您的目的。
@Echo Off
Set /P "input=Please type the favourite colour here: "
If /I Not "%input:green=%"=="%input%" GoTo GREEN
If /I Not "%input:red=%"=="%input%" GoTo RED
If /I Not "%input:yellow=%"=="%input%" GoTo YELLOW
If /I Not "%input:black=%"=="%input%" GoTo BLACK
:ANOTHER
Echo=Input string does not contain green, red, yellow, or black
Timeout 3 /NoBreak>Nul
Exit /B
:GREEN
Echo=Input string contained green
Timeout 3 /NoBreak>Nul
Exit /B
:RED
Echo=Input string contained red
Timeout 3 /NoBreak>Nul
Exit /B
:YELLOW
Echo=Input string contained yellow
Timeout 3 /NoBreak>Nul
Exit /B
:BLACK
Echo=Input string contained black
Timeout 3 /NoBreak>Nul
Exit /B
If
语法的作用是替换colour
中%input%
的任何实例,但没有任何意义,%input%
在展开期间会因匹配而改变已满足Not
==
条件,If /I Not "%input:colour=%"=="%input%" GoTo …