2017-10-14 36 views
0

關閉PC在一個特定的時間,我想上啓動文件夾
,而不是使用任務調度如何使用VBS或批處理腳本

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 
+0

這項工作並不需要VBScript。我相信批處理腳本**或**任務計劃工作正常。 – SteveFest

+0

批處理文件或vbs會做,但我的問題是我不知道.bat和.vbs編碼 –

+0

如何調度任務?不需要編碼。 – SteveFest

回答

2

對於批處理可以使用/create把腳本schtasks命令的子命令來安排任務。 schtasks是一個允許您管理和創建計劃任務的命令。 /create子命令將創建計劃任務。

在爲您提供針對您的請求的解決方案之前,我建議您通過schtasks /create /?或通過我爲schtasks命令添加的link來閱讀窗口幫助消息。兩者都提供了創建計劃任務時可用的不同選項的解釋並提供了一些示例。創建計劃任務很容易,但是如果出現問題(例如未按照您真正需要的方式配置),找到並解決問題可能會非常頭痛。

對於您的情況下做到這一點會是這樣的最簡單的方法:

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

你需要一個蝙蝠CH腳本關閉系統時,它是晚上10點和早上6點之間:

@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%的身份執行語言環境設置(請參閱this answer)。保存爲批處理腳本,例如。如C:\Windows\Curfew_police.bat或「不太明顯」的名稱(如果需要),但腳本仍可供系統上的任何用戶訪問,這一點很重要。然後,你可以計劃將在每次系統啓動時執行該腳本/sc onstart任務:(C:\Windows\Curfew_police.bat對於如)

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

與上述批處理腳本的真實路徑替換c:\path\to script\batch.bat

+1

請注意「shutdown/s/f」甚至不會讓用戶有機會保存一些未完成的工作。也許你可以考慮用'/ t'選項添加超時? –

+0

感謝您對我非常有幫助的回答以及鏈接,我需要爲此開發一些「if」語句和「while循環」代碼... –

+0

您可以用上面的計劃任務替換您的整個while循環。但是,如果我正確理解了你的if語句,那麼如果在10PM之後啓動了系統,那麼你想讓系統關機? –

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 

注意他怎麼不說調度,從而也許他的任務調度器壞了,所以他需要使用啓動文件夾來代替。

+0

這就是它......創建一個任務調度程序總是在我的機器上失敗......這就是爲什麼我必須使用第三方調度程序和它已經顯而易見了。這個批處理文件對他們來說很難閱讀,並且它是我認爲的最佳方式...... @ Z。mikaels。 ..感謝這也 –

+0

'%時間%'變量是語言環境相關,並可能無法在一些機器上工作。睡眠命令也是減少的,它的替換應該是超時的。 – SteveFest