1

誰かが私のバッチを手伝ってくれますか?バッチの開始時にエスケープしようとしていますが、機能していません。簡単だと思いますが、私はこのタイプのプログラミングの常連ではありません。

cls
@echo off
set usr_out=y
set /p usr_out=Press [N] to cancel:

if NOT %usr_out% == Y goto myend
if NOT %usr_out% == y goto myend

echo in

pause
exit

:myend
echo out
pause

編集:echo out申し訳ありませんが、上記のコードは、値を入力しない場合にのみ行に移動することを詳しく説明するのを忘れました。

4

3 に答える 3

5

のデフォルト値を小文字に設定%usr_out%ます y

set usr_out=y

ただし、変数が大文字と等しくないかどうかを確認しください Y

if NOT %usr_out% == Y goto myend

yとは実際には等しくないため、この時点でYスクリプトは正しくジャンプします。:myend

ここでロジックを修正する必要があります。指定された数の条件がすべて満たされていないときにコードブロックをスキップする場合は、次のようなものをバッチで使用する必要があります。

if "%usr_out%"=="y" goto continue
if "%usr_out%"=="Y" goto continue
goto myend
:continue

ただし、特定のケースでは、1文字の大文字と小文字を区別しないチェックのみが必要なため、より単純なアプローチを使用できます。

if /i not "%usr_out%"=="y" goto myend

別の注意点として、プレーンの代わりに、(スクリプトの最後にジャンプする)または(終了せずにバッチスクリプトを終了する)のexitいずれかを使用することをお勧めします。そうしないと、コマンドプロンプトでスクリプトを手動で実行すると、コマンドプロンプトウィンドウが誤って終了する可能性があります。goto :eofexit /bcmd.exe

于 2013-01-20T23:24:12.760 に答える
0

単純に問題なのは、「==」と他のコマンドまたは次のような単語の間にスペースを入れることです。

if NOT %usr_out% == Y goto myend

しかし、これを使用する必要があります:

if NOT %usr_out%==Y goto myend
于 2014-08-25T12:53:23.620 に答える
0

あなたの質問の後半へ:

値を入力しないとき

このチェックを追加できます:

set /p usr_out=Press [N] to cancel:
if "x"=="x%usr_out%" set usr_out=y

これにより、変数に値がないか、値として空の文字列がないかがチェックされます。

于 2018-06-08T17:22:04.407 に答える