我试图创建一个简单的程序,在您输入后显示您的名字。
在花了几个小时试图让这个批处理文件在Windows 10和Windows 7计算机上运行之后,我仍然无法弄清问题是什么。在您输入答案后,无论您是否确认这是您的名字,它仍然无效。
我试图通过将pause
放在任何地方进行调试,但仍然无法正常工作。
有人可以指出出了什么问题吗?感谢。
这是我的代码:
ECHO OFF
setlocal
COLOR A
cls
:getName
ECHO test
echo Please input name.
set "name="
SET /P NAME=
if not defined NAME goto getName
ECHO %NAME%, is this correct? Y/N
set /p 097=
if %O97%==Y goto :begin
set favvid=0
set hack=0
:b
echo Input name
set name=
set /P name=
echo %name%, correct? Y/N
set 897=
set /p 897=
if %897%==N goto :c
if %897%==Y goto :begin
:c
echo Input name
set name=
set /P name=
echo %name%, correct? Y/N
set 897=
set /p 897=
if %897%==N goto b
if %897%==Y goto begin
echo Name = %NAME% Is now your name. Too many attempts
:begin
echo Hello %Name%
pause
答案 0 :(得分:1)
解析批处理脚本中的Avoid starting variable names with a number,这将避免 变量为misinterpreted as a parameter:
%123_myvar%
,然后将其作为%1 23_myvar
为了证明,请强制echo ON
。
并使用(请注意,变量第一个字符不是 密码但字母 O
。
set /p "O97=%name%, correct? Y/N "
if "%O97%"=="Y" goto :begin
rem note quoting in above commands
考虑使用CHOICE
command替代SET /P
(但只接受一个字符/按键)。
答案 1 :(得分:1)
if
行上的两个错误:
您不应该使用数字来启动批处理文件中的变量,因为它们被解释为传递给批处理文件的参数。 %0
是批处理文件本身。 %1
是第一个,%8
是第8个参数等。(您可以在批处理文件中尝试echo --%0--%1--%097%--
以查看它为您提供的结果。)
而不是if "%097%"=="Y" goto begin
使用此if "%Answer%"=="Y" goto begin
现在还要注意,当您的行
set /p 097=
有097
时 在%O97%
的下一行测试它,你没有0
但是 你有字母O
。这使您的测试每次都失败。
您需要将字符串放在引号中,如下所示:
if "%Answer%"=="Y" goto begin
最后请注意,测试区分大小写。因此,当用户按下 y 时,它将被解释为错误的答案。您需要在测试中添加/I
:
if
/I
"%Answer%"=="Y" goto begin
还有一点。在goto
之后你把冒号放在一些地方,有些地方没有,它是兼性的,但它更整洁,以保持一致。