0

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

@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 然后去 else。代码中没有其他缺陷,我找不到任何语法错误,你们能解释一下我做错了什么吗?我是个菜鸟:/

4

2 回答 2

1

尝试替换这个:

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

有了这个:

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

说明:您需要测试 Find 进程的错误级别以使您的代码可能工作,并且重定向器 '>' 只创建一个名为 'if' 的文件,其中包含单词existsvaildatecode.txt

您的 DIR 命令只会查看执行目录,但您的“bam”子程序暗示您打算搜索硬盘驱动器?真的?如果是这样,我的“如果存在”命令应更改为:

dir /s/b validatecode.txt && goto bam

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

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

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

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

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

于 2012-04-09T21:05:25.803 回答
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
...
于 2012-04-09T10:38:43.240 回答