3

作成中のバッチ スクリプトで少し問題が発生しました。このスクリプトでは、ボタンを押した瞬間にボタンを押すことに反応し、 を押さなくても新しい変数を「設定」したいと考えていますEnter。現在、このようなものです。

set b=
set /p b=
ig %b%==a (
goto Success
)

Enter必要なボタンを押すことができますが、後で押すまで待ち​​たくありません。

4

2 に答える 2

6

VISTA 以降の場合

スクリプトが Vista 以降 (XP ではない) で実行されることがわかっている場合は、choice コマンドを使用できます。受け入れる文字を指定する必要があります。デフォルトでは、CHOICE は大文字と小文字を区別しません。返される ERRORLEVEL は、選択リスト内の選択された文字の位置に対応します。

たとえば、ユーザーがAB、またはC(大文字と小文字を区別) を押してキー値を変数に格納するまで待機するには、次のようにします。

setlocal enableDelayedExpansion
set "list=ABC"
choice /cs /c "%list%"
set "list=.%list%"
set "key=!list:~%errorlevel%,1!"
echo %key%

完全なドキュメントは、コマンド ラインから、HELP CHOICEまたはCHOICE /?

XP を含む最新のすべての Windows に対応

SNAKE ゲームのバッチ実装を開発していたときに、XP 以降で動作する非常に賢いソリューションを紹介されました。このソリューションを使用すると、ほぼすべてのキー プレスをキャプチャできます。

set "key="
for /F "usebackq delims=" %%A in (`xcopy /w "%~f0" "%~f0" 2^>NUL`) do (
  if not defined key set "key=%%A"
)
set "key=%key:~-1%"
set key
于 2013-11-06T12:27:50.460 に答える
1

choiceバッチで使用

choice /c YN /m "Is Yes"
if ( %ERRORLEVEL% == 1 ) (
   ECHO "SUCCESS"
)
于 2013-11-06T12:27:36.587 に答える