これは、タイムアウト機能を提供するが視覚的なカウントダウンを提供しない、Vista および Windows 7 用の非常に単純なソリューションです。
@echo off
choice /c:CN /n /m "PC will restart in 30 minutes. Press N to restart Now, or C to Cancel" /t:1800 /d:N
if errorlevel 2 (shutdown -r -t 60 -f) else echo Restart Canceled
これは、視覚的なカウントダウンを提供する Vista および Windows 7 向けのより複雑なソリューションですが、1 秒ごとにコンソール ウィンドウがクリアされます。また、タイミングが少しずれている可能性があります。
@echo off
setlocal enableDelayedExpansion
for /l %%N in (1800 -1 1) do (
set /a "min=%%N/60, sec=%%N%%60, n-=1"
if !sec! lss 10 set sec=0!sec!
cls
choice /c:CN1 /n /m "PC will restart in !min!:!sec! - Press N to restart Now, or C to Cancel. " /t:1 /d:1
if not errorlevel 3 goto :break
)
cls
echo PC will restart in 0:00 - Press N to restart Now, or C to Cancel.
:break
if errorlevel 2 (shutdown -r -t 60 -f) else echo Restart Canceled
XP ソリューションが必要な場合は、タイムアウト機能で入力を求める非ネイティブ コマンド ライン ツールをダウンロードするか、VBScript または JScript に切り替える必要があると思います。
編集
上記の両方のスクリプトは、James K が回答で提供した Microsoft FTP サイトからダウンロードした CHOICE.EXEを使用して、XP で実行するように適合させることができます。
そのバージョンの CHOICE は、構文が少し異なります。
私の最初のスクリプトを適応させるには、次を使用します。
choice /c:CN /n /t:N,1800 "PC will restart in 30 minutes. Press N to restart Now, or C to Cancel"
2 番目のスクリプトを適応させるには、次を使用します。
choice /c:CN1 /n /t:1,1 "PC will restart in !min!:!sec! - Press N to restart Now, or C to Cancel. "
編集 - XPと互換性のある大まかなVBSソリューションは次のとおりです
Set objShell = CreateObject("WScript.Shell")
for i = 30 to 1 step -1
if i=1 then unit=" minute" else unit=" minutes"
rtn = objShell.Popup ( _
"The machine would like to Restart."&VbCrLf&VbCrLf& _
"Click OK to restart now"&VbCrLf& _
"Click Cancel or the [X] close button to abort the restart"&VbCrLf& _
"Do nothing and the machine will restart in "&i&unit, _
60, "Restart in "&i&unit, 1+48 _
)
if rtn <> -1 then exit for
next
if rtn <> 2 then objShell.Run "shutdown -r -f"
HTA を使用すると、より洗練された VBS ソリューションを提供できると思いますが、それにはさらに多くの作業が必要であり、そのテクノロジについてはあまり知りません。