2017-05-08 4 views
0

新しいバッチスクリプト。私はWindows XPを使用しているので、choice.exeを使わずに時間を計られたプロンプトを書く方法があるのだろうかと思っていました。バッチウィンドウxp timed prompt without choice.exe

@echo off 
/set p answer=input y or n in 30 seconds 
rem start timer 
if answer==y(
    goto :action1 
) 
if answer==n(
    goto action2 
) 
rem if timer has expired without input go to :action1 

:action 1 
echo you have entered y 
:action 2 
echo you have entered n 

ヒントありがとうございます。

答えて

0

ここに1つのアイデアがあります。 Wscript.ShellPopup()メソッドを使用できます。タイムアウトパラメータが含まれています。 Yes/Noダイアログは、Yesの場合は6、Noの​​場合は7、タイムアウトの場合は-1を返します。これは、Yes/timeoutのtrue、ブール値にfalseをブール値に変換するのは簡単です。これを.bat拡張子で保存すると、その動作を確認できます。

@if (@CodeSection == @Batch) @then 
@echo off & setlocal 

set delay=30 
set "msg=Do you wish to continue?" 

cscript /nologo /e:JScript "%~f0" "%msg%" %delay% && (
    goto yes 
) || (
    goto no 
) 

:yes 
echo You chose yes. 
exit /b 

:no 
echo You chose no. 
exit /b 

@end // end Batch/begin JScript hybrid code 

var osh = WSH.CreateObject('WScript.Shell'), 
    msg = WSH.Arguments(0), 
    secs = WSH.Arguments(1); 

var response = osh.Popup(msg, secs, 'Waiting for response', 4 + 32); 
// yes or timeout returns true; no returns false 
WSH.Quit(!(response - 7)); 
0

あなたはこの試みることができます:選択してください

EditVar and Choose

をマイクロソフトの選択ツールに似ていますが、より多くの機能を持っています。ここでは、それは選択肢に望ましいかもしれないいくつかの理由があります:

  • ユーザーが無効な選択を行うときには、ビープ音を鳴らしていません。

  • 「デフォルトキー」機能があり、Enterキーを押してデフォルトの選択肢を選択できます。

  • リアルモードDOSバージョン(MS-DOSブートメディアに便利)が付属しています。 別のコンソールウィンドウで複数のインスタンスを実行するとWin32バージョンのタイムアウト機能が混乱することはありません(以前のWin32コンソールバージョンのMicrosoftの選択ツールの問題でした)。

  • 64ビットバージョンが提供されています。

  • ユーザーの選択の表示を抑制することができます。

  • 「ライン入力」モードを使用して、>を選択した後にEnterキーを押す必要があります。

これは例である:

CHOOOSE64.exe -c YNA -d A -n -p "Prompt" -t A,30 
rem   -Choices 
rem     -Default 
rem      -No default prompt 
rem       -Prompt(custom) 
rem          -timeout defaultChoice, timeout in seconds 

if %errorlevel%==1 echo Y 
if %errorlevel%==2 echo N 
if %errorlevel%==3 echo A or timeout-ed