3

このバッチを機能させるために何度も試みましたが、機能せず、気が狂いそうです。また、このウェブサイトをくまなく調べて、質問をする前にさまざまなことを試しました。

選択した選択に応じて、シャットダウン、再起動、またはログオフを行うバッチがあります。これを実行し、答えをチェックしてゼロかどうかを確認することで、数時間から数分、数秒に移動したいときに問題が発生します。「予期しない(がありました」というエラーが表示され、すぐに閉じます。これをバラバラにして個別に実行すると、動作します。

If ステートメントを含むメイン関数を次に示します。バッチ全体をご覧になりたい方はお譲りできます。これを理解するのを助けるために、シャットダウンの実際の使用をコメントアウトしました。REM'd out shutdown 行の前にある 2 行は、これが判明すると削除されます。

:SR_MAIN
cls
echo+
echo+  
set /p SR_hrs=....Please enter the number of hours before %SR_NAME%:  

IF "%SR_hrs%" == 0 (
     echo+
     echo    You don't want hours, huh?
     timeout /t 2 > nul
     cls
     echo+
     echo+
     set /p ptm=....Please enter the number of minutes before %SR_NAME%:  
     IF %ptm% == 0 (
          echo+
          echo    You don't want minutes, huh?
          timeout /t 2 > nul
          cls
          echo+
          echo+
          set /p pts=....Please enter the number of seconds before %SR_NAME%:  
          IF %pts% == 0 (
               echo+
               echo    Exiting to Shutdown menu...
               timeout /t 2 > nul
               goto SHUTREMENU
          ) ELSE (
               cls
               echo+
               echo+
               echo    This will %SR_NAME% the computer in the seconds you provided.
               set /a tm=pts
               echo+
               echo    Waiting %tm% seconds before continuing...
               echo+
               timeout /t %tm%
                  echo Now would come the %SR_NAME%!
                  pause
REM               shutdown /f /%SR_N% /t 0
               exit
          )
     ) ELSE (
          cls
          echo+
          echo+
          echo    This will %SR_NAME% the computer in the minutes you provided.
          set /a tm=ptm*60
          echo+
          echo    Waiting %ptm% minutes (%tm% seconds) before continuing...
          echo+
          timeout /t %tm%
             echo Now would come the %SR_NAME%!
             pause
REM          shutdown /f /%SR_N% /t 0
          exit
     )
) ELSE (
     cls
     echo+
     echo+
     echo    This will %SR_NAME% the computer in the hours you provided.
     set /a tm=SR_hrs*60*60
     echo+
     echo    Waiting %SR_hrs% hours (%tm% seconds) before continuing...
     echo+
     timeout /t %tm%
        echo Now would come the %SR_NAME%!
        pause
REM     shutdown /f /%SR_N% /t 0
     exit
)

:MAIN_MENU
ECHO Exiting to Main Menu...
PAUSE

ご協力いただきありがとうございます。これは私にとって本当のパズルでした。

J

4

2 に答える 2

1

セバスチャンは行方不明を指摘した%.

もう1つの問題は、変数を設定する同じコードブロック内で変数の展開が機能しないことです。コード ブロック全体が何かが実行される前に解析され、コードのようなもの%ptm%は解析時に展開されます。したがって、設定される前の値を取得していますptm!

解決策は、遅延展開を使用することです。

setlocal enableDelayedExpansionスクリプトの一番上に置きます。

次に、!var!代わりに%var%コード ブロック内で使用します。

遅延拡張の詳細については、コマンド ラインから入力し、 「最後に、遅延環境変数拡張のサポート...」help setという箇所から読んでください。

于 2012-10-03T00:35:05.027 に答える
1

パーセント記号がありません。

IF "%SR_hrs%" == 0 (

           ↑ there
于 2012-10-02T23:18:35.110 に答える