我的代码:
::Correct
@echo off
echo Password, please!
::Wrong
set p = %random%
set /p =
if /p == %p% goto true
else goto false
::Correct
:true
echo Correct!
pause
exit
:false
echo Wrong! Too bad! Bye!
pause
exit
我指出这部分是错的,但我不知道如何解决它。批处理文件应该要求你输入密码(这是随机设置的),如果你猜对了“正确!”,如果你猜错了,应该说“错!太糟糕了!再见!”。现在,无论我做什么,只是说没有“其他”命令。请以有效的方式提供帮助(如果不起作用,请提供其他方式)。
答案 0 :(得分:2)
许多错误。
set p = %random%
将名为 p Space 的变量设置为 Space randomnumber
=
命令中set
的 侧的空格非常重要
set /p =
set /p
命令的语法是`set / p varname =“prompt string”请注意,间距仍然很大,而且您的代码无法指定要加载的变量。
if /p == %p% goto true
由于/p
是一个字符串常量,因此变量p
的内容必须与此常量(即/p
)相同才能生效。 /p
不是变量 - 如果是,您需要使用%/p%
访问它 - 并且因为您设置的是 p 空格 p
的{{1}}将为空,因此该命令将被解释为
%p%
现在,由于if /p == goto true
和/p
不是相同的字符串,因此不执行命令goto
,因此您不会收到错误报告。
true
孤儿else goto false
。 else
的{{1}}子句的语法是
else
括号的定位至关重要。第一次打开必须与if
(或执行)位于同一物理行上,如果使用了else,则前面的if condition (
dothis_if_true
) else (
dothis_if_false
)
和后续if
必须与)
和位于同一物理行上,(
关键字与括号之间必须有空格。
else
注意:一行中的初始else
通常用作评论,因为它比:Correct
@echo off
echo Password, please!
:Wrong
set /a p=%random%
set "pass="
set /p "pass=Your password "
if not defined pass goto wrong
if "%pass%"=="%p%" (
goto true
) else (
goto false
)
:true
echo Correct!
pause
exit
:false
echo Wrong! Too bad! Bye!
pause
exit
更容易输入和侵扰性更小。这个技巧在'block statement'(带括号的系列语句)中不能正常工作,因为它实际上是一个破坏的标签。
我已将::
条评论更改为简单标签,因为我需要为修改后的代码使用标签。
rem
这会将::
设置为参数中公式的set /a p=random
算术结果给出的字符串。这只是p
,随机数为0..32767。
/a
这只是将变量%random%
设置为 nothing 。插入引号以告知set "pass="
在结束pass
之后出现的任何空格不将包含在指定的值中。
cmd
接受键盘输入到变量"
。请注意,如果键盘的响应只是 Enter ,那么变量将保持不变,它将不会获得 nothing 的值;因此它被初始化为 nothing
set /p "pass=Your password "
如果您没有输入任何内容,请继续循环,直到收到回复为止。
pass
如果从键盘输入的字符串与所选随机数的字符串版本相同,请转到if not defined pass goto wrong
...
请注意,由于从键盘接受的字符串是不受控制的 - 它可能包含空格之类的分隔符 - 然后整个字符串用引号括起来将字符串组合在一起作为一个元素。这必须与另一方完全匹配,因此我们也需要引用该项目。这不是防弹,但它不如忽略引号那么脆弱。
您可能想尝试将提示调整为
if "%pass%"=="%p%" (
goto true
) else (
goto false
)
用于测试目的。这将在提示中显示密码,因此您应该比32,768中的1更有可能猜测。
答案 1 :(得分:0)
看看这个,看看差异。
@echo off
set "p=%random%"
set /p "g=Password please! "
If "%g%"=="%p%" (goto :true) else (goto :false)
:true
echo Correct!
pause
exit
:false
echo Wrong! Too bad! Bye!
pause
exit