批量关机命令的行为类似于睡眠命令,如何修复?

时间:2017-03-17 17:10:46

标签: windows batch-file

我在本网站上的其他帖子的帮助下创建了这个批处理文件,混合了我的初学者知识。 它的目的是在一段时间后关闭或睡眠计算机,这样我就可以让它完成一项任务而不会在完成任务后整夜运行。

问题是,如果我运行shutdown命令,它似乎会关闭,但是当打开时会恢复任何打开的应用程序,有时无法正常启动。 (例如,开机需要1-2次才能实际上电,而不是再次关闭时刻。)

运行新安装的Windows 10家用x64

以下是该文件的完整代码:

@echo off 
color 3F
mode con: cols=52 lines=5
echo Minutes until event?
set /p min=
set /a sec="min * 60"
echo Shutdown-1 or Sleep-2
set /p eventtype=
if %eventtype%==1 goto :shutdown
if %eventtype%==2 goto :sleep
:shutdown (
cls
echo Shutdown in %min% minutes at:
for /F "tokens=1-3 delims=:." %%a in ("%time%") do (
   set timeHour=%%a
   set timeMinute=%%b
   set timeSeconds=%%c
)
rem Convert HH:MM to minutes + %min%
set /A newTime=timeHour*60 + timeMinute + %min%
rem Convert new time back to HH:MM
set /A timeHour=newTime/60, timeMinute=newTime%%60
rem Adjust new hour and minute
if %timeHour% gtr 23 set timeHour=0
if %timeHour% lss 10 set timeHour=0%timeHour%
if %timeMinute% lss 10 set timeMinute=0%timeMinute%
echo %timeHour%:%timeMinute%:%timeSeconds%
timeout /t %sec% /nobreak
start shutdown.exe /s /t 00
)
:sleep (
cls
echo Sleep in %min% minutes at:
for /F "tokens=1-3 delims=:." %%a in ("%time%") do (
   set timeHour=%%a
   set timeMinute=%%b
   set timeSeconds=%%c
)
rem Convert HH:MM to minutes + %min%
set /A newTime=timeHour*60 + timeMinute + %min%
rem Convert new time back to HH:MM
set /A timeHour=newTime/60, timeMinute=newTime%%60
rem Adjust new hour and minute
if %timeHour% gtr 23 set timeHour=0
if %timeHour% lss 10 set timeHour=0%timeHour%
if %timeMinute% lss 10 set timeMinute=0%timeMinute%
echo %timeHour%:%timeMinute%:%timeSeconds%
timeout /t %sec% /nobreak
rundll32.exe powrprof.dll,SetSuspendState 0,1,0
)

2 个答案:

答案 0 :(得分:1)

它现在有效!感谢@Compo和@Plirkee的投入。

以下是任何人都想自己使用的编辑过的全功能代码:

{{1}}

答案 1 :(得分:-1)

我注意到您关闭的方式是使用shutdown.exe。您只需使用shutdown命令即可​​。您可以start shutdown.exe /s /t 00而不是shutdown /s /t 00

这可能是也可能不是解决方案,但值得一试。至少,这可以节省10个字符。