windows - 批量关机命令表现得像 sleep 命令,如何解决?

标签 windows batch-file

我在本网站其他帖子的帮助下结合我所掌握的初学者知识创建了这个批处理文件。 它的目的是在设定的时间后关闭或休眠计算机,这样我就可以让它完成任务而无需在它完成后整夜运行。

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

运行全新安装的 Windows 10 home 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

关于windows - 批量关机命令表现得像 sleep 命令,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42863432/

相关文章:

batch-file - 批量循环期间捕获击键

windows - 如何在 Windows 上部署 CUDA 程序?

windows - 如何自动 FTP 我正在编辑的文件

c++ - 哪里可以下载 Microsoft 语音 SDK 5.4

c# - 适用于 Windows xp、7、8 的最佳 .net 框架版本,无需单独安装或更新

windows - Git bash 不断自动滚动到窗口底部

batch-file - 批处理脚本 "for/f ..."

if-statement - 批处理脚本 if 语句 - 意外 (

windows - 为什么特定的 Windows 批处理参数会导致崩溃?

windows - 批处理文件中的 at 符号 (@) 是什么,它有什么作用?