批量关机命令的行为就像睡眠命令一样,如何解决?

我从这个网站上的其他post的帮助创build了这个batch file,混合了我有什么初学者的知识。 它的目的是要么关机,要么在一段时间后让电脑进入睡眠状态,这样我就可以完成一个任务,而不需要整夜运行。

问题是,如果我运行关机命令,它将看似closures电源,但打开时恢复所有打开的应用程序,有时不能正确启动。 (例如,需要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 ) 

现在工作! 感谢@Compo和@Plirkee的投入。

这里是编辑的全功能的代码,任何人都希望自己使用它:

 @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 shutdown /p :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 

我注意到你的关闭方式是使用shutdown.exe 。 你可以简单地使用shutdown命令。 不用start shutdown.exe /s /t 00你可以shutdown /s /t 00

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