Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批处理中的Shutdown命令的行为类似于sleep命令,如何修复?_Windows_Batch File - Fatal编程技术网

Windows 批处理中的Shutdown命令的行为类似于sleep命令,如何修复?

Windows 批处理中的Shutdown命令的行为类似于sleep命令,如何修复?,windows,batch-file,Windows,Batch File,我在本站其他帖子的帮助下创建了这个批处理文件,其中混合了我的初学者知识。 它的目的是在设定的时间后关闭或休眠计算机,这样我就可以在完成任务后让它完成任务,而不必整夜运行 问题是,如果我运行shutdown命令,它看起来会关机,但打开后会恢复任何打开的应用程序,有时无法正确启动。(例如,需要通电1-2次,它才能真正通电,而不是片刻后再次关闭。) 运行新安装的Windows 10 home x64 以下是我的文件完整代码: @echo off color 3F mode con: cols=52

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

问题是,如果我运行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
)

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


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

它现在可以工作了!感谢@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

TY用于格式化组件,只需运行行
start shutdown.exe/s/t 00
。。在这种情况下,它是否正确关闭?将第11行更改为just
:shutdown
;将第31行更改为刚才的
:sleep
;删除第30行和第50行的所有内容。然后确保禁用休眠,并在尝试之前关闭Powercfg-Hagain@Plirkee是的,它确实按预期工作。@对组件进行了更改,已确认休眠已关闭(由于重新安装Windows而忘记执行此操作,谢谢提醒。让SSD不希望休眠继续进行。)将测试它的运行情况,当运行时间少于5分钟时,事件似乎可以正常运行,但有时当运行时间较长(2小时以上)时,我会发现这个问题,所以会看到发生了什么。他们的shutdown命令没有问题,尽管它可以简化为
shutdown/p
如果它不是一个解决方案,那么它不是一个答案,应该作为注释发布。正如@Compo所说,他们使用shutdown的方式没有任何问题。