为什么这个批处理文件不起作用?

时间:2016-05-15 18:09:24

标签: windows batch-file

我试图创建一个简单的程序,在您输入后显示您的名字。

在花了几个小时试图让这个批处理文件在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

2 个答案:

答案 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行上的两个错误:

  1. 您不应该使用数字来启动批处理文件中的变量,因为它们被解释为传递给批处理文件的参数。 %0是批处理文件本身。 %1是第一个,%8是第8个参数等。(您可以在批处理文件中尝试echo --%0--%1--%097%--以查看它为您提供的结果。)

    而不是if "%097%"=="Y" goto begin

    使用此if "%Answer%"=="Y" goto begin

  2.   

    现在还要注意,当您的行set /p 097=097时   在%O97%的下一行测试它,你没有0但是   你有字母O。这使您的测试每次都失败。

    1. 您需要将字符串放在引号中,如下所示:

      if "%Answer%"=="Y" goto begin

    2. 最后请注意,测试区分大小写。因此,当用户按下 y 时,它将被解释为错误的答案。您需要在测试中添加/I

      if /I "%Answer%"=="Y" goto begin

    3. 还有一点。在goto之后你把冒号放在一些地方,有些地方没有,它是兼性的,但它更整洁,以保持一致。