Fo llowingコードは、ユーザの入力をチェックするために使用することができます
@echo off
setlocal EnableExtensions EnableDelayedExpansion
:setmyvar
set "myvariable=""
set /P "myvariable=Please enter: "
set "TestVar=!myvariable:"=!"
if not defined TestVar goto setmyvar
if not "!TestVar!" == "!myvariable!" (
echo/
echo Variable cannot contain quotation marks.
echo/
pause
echo/
goto setmyvar
)
echo Success^^!
rem Other commands.
endlocal
を促す前に、環境変数myvariable
は、二重引用符で定義されています。 RETURNまたはENTERの場合、環境変数myvariable
は現在の値を保持します(または前に定義されていない場合でも定義されていません)。
新しい環境変数TestVar
が環境変数myvariable
の値で定義されていますが、すべての二重引用符が削除されています。
TestVar
は、すべての今、ユーザーが何か、単に二重引用符を入力していなかったようで定義されていません。 は今、三つの可能性があります。
TestVar
は、myvariable
とは異なります。myvariable
には、1文字以上の二重引用符も含まれています。
TestVar
は、ユーザーが二重引用符を含まない文字列を入力したときと同じです(myvariable
)。
等しくない環境変数の比較は、特に指定のない限り、二重引用符で即時環境変数の展開%myvariable%
が構文エラーになりとdelayed expansionを使用することが必要です。
最初のケースでは、ユーザーに再度メッセージが表示されます。
は、後者の場合、ユーザは、引用符文字列を入力すると、ユーザが以前入力した文字列を思い出して、それを編集するUP ARROWを使用することができる、再度文字列を入力することができ要件について通知されます。
3番目のケースでは、バッチファイルの実行が続行されます。
出力するテキストの感嘆符は、残りのコードがmyvariable
にアクセスするために必要に応じて遅延拡張が有効であるため、2つのキャレットでエスケープする必要があります。endlocal
した後、次のコマンドラインを使用している以外の環境変数myvariable
はもう存在しません:
endlocal & set "myvariable=%myvariable%"
この行は、以前の環境でmyvariable
は、このコマンドラインの解析に有効な環境でのmyvariable
の現在の値を指定して、コマンドendlocal
によって復元定義します。
echo/
は、echo.
よりも安全な方法で空白行を出力するだけです。
使用されているコマンドとその動作方法を理解するには、コマンドプロンプトウィンドウを開き、次のコマンドを実行して、コマンドごとに表示されているすべてのヘルプページをすべてよく読んでください。
echo /?
endlocal /?
goto /?
if /?
rem /?
set /?
setlocal /?
setlocal
とendlocal
の詳細についてはthis answerとそれ以外の2つの回答を参照してください。 set "variable=value"
の使用に関する説明についてはWhy is no string output with 'echo %var%' after using 'set var = text' on command line?
ありがとうございました!これは束を助けた!私は、 "setlocal EnableExtensions EnableDelayedExpansion"がトップ(または少なくともエコーオフの下)にあることが必須であることに気付くまで、ちょっと苦労していました。スクリプトのどこでもこの機能をオン/オフにすることができますか? – ditheredtransparency
もちろん、答えに書いたとおりです。 [MC ND](http://stackoverflow.com/users/2861476/mc-nd)によって書かれた答えでは、あなたが求めていることを実証している絶対最小コマンドブロックに遅延拡張が有効になっています。コマンド拡張もデフォルトで有効になっています(レジストリ値は変更されます)。ここでは 'set/P'が利用できません。しかし、これについては、参照されている回答の1つで詳しく説明されています。 – Mofi