Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理崩溃,带空格,即使有var集和延迟扩展_Batch File - Fatal编程技术网

Batch file 批处理崩溃,带空格,即使有var集和延迟扩展

Batch file 批处理崩溃,带空格,即使有var集和延迟扩展,batch-file,Batch File,我两天前才开始编写代码。(奇怪的是,它让人上瘾)。我开始这样做是为了让我能够模拟“电脑黑客”的体验,作为我正在设计的逃生室的一部分。主要是,我只是环顾四周,找到不同的想法,并以一种审美愉悦的方式将它们组合在一起。但是,我想让它具有防撞性。因此,当人们使用它时,他们不会因为简单的按钮混合和按enter键而启动 我在:菜单中找到了这个,但在人造登录页面上没有。 下面是我编写的代码,我希望能够在其他页面上工作: :menu cls set "answer=Nothing^!" set var=%v

我两天前才开始编写代码。(奇怪的是,它让人上瘾)。我开始这样做是为了让我能够模拟“电脑黑客”的体验,作为我正在设计的逃生室的一部分。主要是,我只是环顾四周,找到不同的想法,并以一种审美愉悦的方式将它们组合在一起。但是,我想让它具有防撞性。因此,当人们使用它时,他们不会因为简单的按钮混合和按enter键而启动

我在:菜单中找到了这个,但在人造登录页面上没有。 下面是我编写的代码,我希望能够在其他页面上工作:

:menu 
cls 
set "answer=Nothing^!"
set var=%var: =%
echo. 
echo Menu
echo.
echo 1. Login
echo 2. Instructions
echo 3. Exit
echo.
set /p answer=Type the number of your option and press enter: 
echo.
echo.
if /I "!answer!" == "exit" goto exit
echo You answered: %answer%
echo Which is not a valid entry.
echo Try again.
if /I %answer% == 1 goto :Login1  
if /I %answer% == 2 goto :Instructions
if /I %answer% == 3 goto :Exit
if /I %answer% == 43153 goto :done 
pause
goto :menu
这是我无法使用的代码

:Login2
cls
set "un=Nothing^!"
set "pw=Nothing^!"
set var=%var: =%
echo.
echo Log On
echo.
if %counter% lss 5 echo Password incorrect, %counter% attempts left
echo. 
echo. 
set /p un=Enter your UserID:
set /p pw=Enter your Password:
if /I %un% == ID (
if /I %pw% == PASSWORD goto :loading1 
)
if /I !un! == "exit" ( 
if !pw! == "exit" goto loading2
goto :loading2
如果我键入一些随机输入,例如:asdf asdf 菜单没有崩溃。但是login2页面确实如此。如果用户名和密码或者只有用户名或密码有空格,它就会崩溃。如果我只是通过屏幕“输入”,它不会像菜单那样自动填充“Nothing^!”

我会将整个文件粘贴到下面,但由于我的装饰自由,它不适合这个页面。我找不到上传的地方。但如有任何意见或建议,将不胜感激


再次感谢您的帮助

始终在
IF
表达式中引用变量

IF /i "%un%" == "ID" ...
IF /i "%pw%" == "PASSWORD" ...
或者最好在这里使用延迟扩展

IF /i "!un!" == "ID" ...
IF /i "!pw!" == "PASSWORD" ...
是正确的

if /I %un% == ID (
语法正确,前提是
un
包含不包含空格的简单字符串

如果
un
包含
一些空格
,则该命令被解释为

if /I some spaces == ID (
所需的语法是

如果[/i]string1运算符string2执行此操作

==
这样的操作符也是一个字符串,因此
cmd
会在需要操作符的地方看到
空格,所以它会拒绝

若要在字符串中允许空格(和其他分隔符),请像上面对第一个
if
所做的那样“引用字符串”

哦,这是关于引用的特别之处-它们必须完全匹配-你不能引用一方而不能引用另一方


这仅适用于字符串参数-如果参数是数字或解析为数字,则不使用引号。如果它们与数值参数一起使用,参数将按字母顺序进行比较,因此
98
大于
123
,因为
9
大于
1

…除非它们是数字。un和pw在逃生室实际使用时都是字母数字。@Magoo你说得对,但即使这样,我也会在将它们放入
变量之前测试它们,如果
引用我的变量有什么好处?
set var=%var:=%
答案
变量没有影响,你应该将它改为
set“answer=!answer:=!”
我认为这回答了我的一点问题。但是我加载它,并进行测试,我做我的用户(主要是青少年和中学生)将要做的事情——混搭的东西,因为为什么不!抱歉,我还没来得及完成就已经发送了。因此,当我进入登录屏幕时,我可以输入USER作为un,ID作为密码。没问题。但孩子可能不会。他们可能会键入:Mr.Last Name--我希望它将该字符串注册为不正确的条目,然后说访问被拒绝,然后将他们跳回菜单页面,此时出现一个计数器,表示他们还有4次尝试。但是如果它不接受任何字符串。你也是这样:如果[/i]string1操作符string2做了我应该做的事情,这样我才能得到想要的效果?(例如,
if/i“%un%”==“ID”(
以不区分大小写的方式将
un
的内容与
ID
的文字匹配,所以只有
ID
(在任何情况下)将作为
true
传递给密码检查。如果
un
包含空格,则不会崩溃(当然也有强制执行的方法),但由于
任何包含空格的字符串将与
ID
不匹配,因此不会检查密码。
if /I some spaces == ID (