某些批处理文件有问题,不能做它应该做的事情,无法发现语法错误

时间:2012-04-09 09:17:57

标签: batch-processing batch-file

所以,我正在批量编写计算机调速器,我对这个问题感到困惑:

@echo off
cls
color 02
:licence
title Computer Speeder 2012 (Free licence)
cls
echo This is the free version of Computer Speeder 2012.
echo.
echo Do you wish to license this copy? [Y]es or [N]o.
choice /c NY /n
if ERRORLEVEL 2 goto license
if ERRORLEVEL 1 goto startup1
:license
dir | find "validatecode.txt" > if exist "validatecode.txt"
goto bam
) else (
goto else
:bam
cls
echo Type in your lisencing code to validate this
echo copy to upgrade to the full version:
echo.
set /p vd=""
:else
cls 
echo You do not have a validation file on your computer,
echo if you purchased the full version you probably
echo deleted the file. Check the recycle bin, check you
echo put it in the correct path or re-purchase the
echo software because it has an individual code.
pause
goto startup1

由于某些奇怪的原因,它按时间顺序执行所有这些代码: 首先,它询问您是否要许可该软件的副本。如果您按Y,则需要您许可。然后它执行行dir |找到“validatecode.txt”>如果存在“validatecode.txt” 等等等等。然而,它去了bam,然后去了其他地方。代码中没有其他缺陷,我找不到任何语法错误,你们能解释一下我做错了什么吗?我是一个菜鸟:/

2 个答案:

答案 0 :(得分:1)

如果您希望程序在执行:bam后停止,则应该输入

goto:EOF之后

set /p vd="

:bam
cls
echo Type in your lisencing code to validate this
...
set /p vd=""
goto:EOF

:else
cls
...

答案 1 :(得分:1)

尝试替换它:

:lisence
dir | find "validatecode.txt" > if exist "validatecode.txt"
goto bam
) else (
goto else

用这个:

:lisence
if exist "validatecode.txt" goto bam
goto else

说明: 您需要测试查找过程的错误级别,以便您的代码可能正常工作,重定向器'>'只创建一个名为'if'的文件,奇怪地包含 exists vaildatecode.txt 这两个词。

您的DIR命令只会查看执行目录,但您的'bam'子例程意味着您打算搜索硬盘驱动器?真正?如果是这样,我的'if exist'命令应该改为:

  

dir / s / b validatecode.txt&&转到bam

您似乎没有在文件中使用信息,因此如果您需要搜索整个硬盘驱动器,此命令将执行它,并将逻辑上转到正确的子例程。

该代码段为本地目录中名为validatecode.txt的文件提供了测试,如果找到,则执行goto到标签bam。如果该文件不存在,焦点将下降到下一行,该行执行标签的转到:else。

您还需要以不同方式完成脚本。就目前而言,如果找到validatecode.txt,您将执行'bam'和'else'。您应该放置一个最终标签,例如:exit(:eof保留)并将goto:exit命令作为每个子例程的最后一行。

最后,您对子例程Startup1的调用将始终失败,因为您没有名为Startup1的标签。

从流程的角度来看,如果用户不想许可他们正在使用的副本,您似乎无法退出。