2016-04-15 14 views
0

コンピュータをシャットダウンするスクリプトを作成しようとしています。バッチファイル内の2つの回答のうち1つのみを受け入れるために、2つのIFを1つの関数で構成する

シャットダウンコマンドの秒数に変換するために、値を分単位または時間単位で入力するかどうかを尋ねます。

これは私のスクリプトのように見え、動作しません。

@echo off 
color 0a 
:home 
echo Hours (h) or minutes (m)? 
set /p unit= 

if "%unit%"=="h" (
    echo For how long do you want to delay it? 
    set /p value= 
    set /a secs="value*=60*60" 
    ) if "%unit%"=="m" (
    echo For how long do you want to delay it? 
    set /p value= 
    set /a secs="value*=60" 
    ) else (
    goto:home 
    ) 

rem shutdown /s /f /t %secs% 
echo %secs% 

echo Closing in 3 seconds. 
ping 127.0.0.1 -n 4 > nul 

誰もが(私は存在すると確信している)私を明るくまたはそれを達成するためのより良い方法を考え出すことができれば、それは素晴らしいことです。

答えて

0

今私は愚かな気がする。

私は完全にelse ifを忘れました。

とにかく、ここに完成した作業スクリプトです。また、入力は大文字と小文字を区別しないようになりました。

@echo off 
echo **************************** 
echo *       * 
echo * QUICK SHUTDOWN SCHEDULER * 
echo *       * 
echo **************************** 
echo. 
echo Hours (H) or minutes (M)? 
:home 
set /p unit= 

if /I "%unit%"=="h" (
    echo For how many hours do you want to delay it? 
    set /p value= 
    set /a secs="value*=60*60" 
) else if /I "%unit%"=="m" (
    echo For how many minutes do you want to delay it? 
    set /p value= 
    set /a secs="value*=60" 
) else (
    echo Please only type H or M. 
    goto:home 
) 

shutdown /s /f /t %secs% 

echo Closing in 3 seconds. 
ping 127.0.0.1 -n 4 > nul 
0

あなたの代わりに、ユーザーset /Pからの入力を取得するchoiceコマンドを使用することができます。この方法では、常に正しいので、指定された入力を確認する必要はありません。詳細については、choice /?を入力してください。

アレイを使用して、ifを使用せずに正しいユニット名のメッセージを表示することもできます。詳細はthis postを参照してください。

@echo off 
setlocal EnableDelayedExpansion 

rem Define the "units" array 
set "units[1]=minutes" 
set "units[60]=hours" 

choice /N /C MH /M "Hours (H) or minutes (M)? " 
set /A unit=(%errorlevel%-1)*59 + 1 
set /p "value=For how many !units[%unit%]! do you want to delay it? " 

set /a "secs=value* unit *60" 

shutdown /s /f /t %secs% 

echo Closing in 3 seconds. 
ping 127.0.0.1 -n 4 > nul 
関連する問題