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 に移動し、THEN は 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

説明:コードが機能する可能性があるため、検索プロセスのエラーレベルをテストする必要があります。リダイレクタ'>'は、奇妙なことに、existsという単語とvaildatecode.txt含む'if'というファイルのみを作成します。

DIRコマンドは実行ディレクトリのみを検索しますが、「bam」サブルーチンは、ハードドライブを検索するつもりであることを意味しますか?本当ですか?その場合、「存在する場合」コマンドを次のように変更する必要があります。

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

ファイル内の情報を使用していないように見えるため、ハードドライブ全体を検索する必要がある場合は、このコマンドが実行し、論理的に正しいサブルーチンに移動します。

このスニペットは、ローカルディレクトリにあるvalidatecode.txtというファイルのテストを提供し、ラベルbamが見つかった場合はgotoを実行します。ファイルが存在しない場合、フォーカスは次の行に移動し、ラベル:elseへのgotoを実行します。

スクリプトも別の方法で終了する必要があります。現状では、validatecode.txtが見つかった場合は、「bam」と「else」の両方を実行します。:exit(:eofは予約済み)のような最終ラベルを配置し、各サブルーチンの最後の行としてgoto:exitコマンドを作成する必要があります。

最後に、Startup1というラベルがないため、サブルーチンStartup1の呼び出しは常に失敗します。

フローの観点からは、ユーザーが使用しているコピーのライセンスを取得したくない場合は、終了する方法がないように見えます。

于 2012-04-09T21:05:25.803 に答える
1

を実行した後にプログラムを停止させたい場合:bamは、

goto:EOFset /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 に答える