如何使用vbs或批处理脚本在特定时间关闭pc

时间:2017-10-14 03:46:43

标签: batch-file vbscript

我希望将一个脚本放在启动文件夹中 而不是使用任务调度程序

    If time >= 22:00 hrs   // shutdown if startup after 10pm
      Shutdown /s /f
    break

    While (time != 22:00hrs) //looping until 22:00hrs
    Any statement
    Else 
      Shutdown /s /f
    Exit

3 个答案:

答案 0 :(得分:2)

对于批处理,您可以使用schtasks命令的/create子命令来安排任务。 schtasks是一个允许您管理和创建计划任务的命令。 /create子命令将创建计划任务。

在为您提供解决方案之前,我建议您使用schtasks /create /?或通过我为schtasks命令添加的link阅读Windows帮助消息。两者都提供了有关创建计划任务时可用的不同选项的说明并提供了一些示例。创建计划任务很容易,但是当一个任务导致问题时(例如,它没有按照您真正想要的方式进行配置),找到并解决问题可能会非常令人头痛。

对于您的情况,最简单的方法是:

SCHTASKS /create /tn "Curfew" /tr "C:\Windows\System32\shutdown.exe /s /f" /sc daily /st 22:00

这将创建一个任务,每天晚上10点关闭系统。

编辑:命令说明:

  • /tn选项为计划任务提供名称
  • /tr选项用于指定任务必须执行的命令
  • /sc选项指定任务的频率
  • /st选项指定必须安排任务的当天时间

同样,有关这些选项和命令本身的更多说明,请阅读帮助信息(schtasks /create /?)或关注link

可以找到其他一些有用的计划类型示例here

编辑2:关闭系统的任务,如果它已在10.PM和06.AM之间启动(参见comment OP

您需要一个批处理脚本,该脚本在晚上10点到06点之间关闭系统:

@echo off
REM Get current timestamp from system
FOR /F "tokens=2 delims==." %%G in ('wmic os get LocalDateTime /VALUE') DO set timestamp=%%G
REM Extract hours from timestamp
set hour=%timestamp:~8,2%
REM Verify if hour >= 22 or hour < 6
set shutdown=
IF %hour% GEQ 22 set shutdown=true
IF %hour% LSS 6 set shutdown=true
REM Shutdown system if so
IF "%shutdown%" == "true" shutdown /s /f

它使用wmic os LocalDateTime来获取当前时间戳而不是%time%,因为它具有ISO格式的优势,并且不依赖于%time%的区域设置(请参阅{{3 }})。将其另存为批处理脚本,例如。如果您需要C:\Windows\Curfew_police.bat或“不太明显”的名称,但该系统上的任何用户仍然可以访问该脚本非常重要。然后,您可以安排每次系统以/sc onstart启动时执行脚本的任务:

schtasks /create /tn "Curfew police" /tr "\"c:\path\to script\batch.bat\"" /sc onstart

c:\path\to script\batch.bat替换为上面批处理脚本的实际路径(例如C:\Windows\Curfew_police.bat)。

答案 1 :(得分:0)

您也可以将文件移动到批处理文件中的启动文件夹,而不是使用调度程序。但它确实要求您成为管理员。

@echo off
::sets the hour to a varible called hour
set hour=%TIME:~0,2%

::copy the file only if it doesn't exist.
::This is important because we don't want to copy the file every time the computer starts up.
if NOT EXIST "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\%0" (
copy "%cd%\%0" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\%0"
)
::if you want this to only pertain to you, replace:
::"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\%0"
:: with "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\%0" both times.


:loop
if "%hour%" NEQ "22" (
::wait one minute, sence windows %time% command doesn't have seconds
sleep 60
set hour=%TIME:~0,2%
) else (
shutdown /s /f
)
goto :loop

请注意他如何在没有调度程序的情况下说,因此他的任务调度程序可能已损坏,因此他需要使用启动文件夹。

答案 2 :(得分:0)

使用此代码生成名为turnoffafterxMins.vbs的vbs文件

Set WshShell = WScript.CreateObject("WScript.Shell")
Dim batName 
Dim statusCode
Dim returntext
returntext = InputBox("How long? (in minuites)", "How long?", "60", 150, 150)

if IsNumeric(returntext) Then
returntext = returntext*1000*60
WScript.Sleep returntext
batName = "C:\Users\The_SUDO\Desktop\shutdown.bat"
statusCode = WshShell.Run (batName, 1, true)
MsgBox returntext
else
batName = "C:\Users\The_SUDO\Desktop\turnoffafterxMins.vbs"
statusCode = WshShell.Run (batName, 1, true)
end if

然后使用此代码

创建一个名为shutdown.bat的批处理文件
shutdown.exe /s /f