2015-02-11 56 views
0

這裏就是我試圖完成:批處理文件:根據用戶輸入創建多個起始時間的多個計劃任務

我有一個批處理文件,將創建2所需要的計劃任務。 它會提示用戶根據需要輸入開始時間。 使用輸入的時間,它會爲其創建的每個計劃任務創建%StartTime%。

我需要創建第二個任務,以便實際創建1分鐘後的開始時間,即用戶輸入的內容。

例如: 我運行腳本並輸入15:00的時間作爲開始時間。我不想把這兩個任務放在這兩個任務上,而是希望第二個任務從15:01開始。

代碼:

set /p startTime=Enter Start Time in 24 hour format (ex 14:00 for 2pm, 08:00 for 8am): 
schtasks /create /tn "Task1" /sc DAILY /st %StartTime% /tr "Task 1" 
schtasks /create /tn "Task2" /sc DAILY /st %StartTime% /tr "Task 2" 

任何幫助,將不勝感激。

+0

[回答這裏](http://stackoverflow.com/a/13736389/3439404) – JosefZ 2015-02-11 23:13:59

+0

答案是接近的,我需要它的原始時間的用戶輸入工作,這是我的一部分遇到麻煩。我很欣賞這種迴應。 – Acemack 2015-02-11 23:21:39

+0

只是使用'「%startTime%」'而不是''%time%'''而忽略_seconds_。 – JosefZ 2015-02-11 23:26:00

回答

0
set /p startTime=Enter Start Time in 24 hour format (ex 14:00 for 2pm, 08:00 for 8am): 
for /F "tokens=1-3 delims=:." %%a in ("%startTime%") do (
    set timeHour=%%a 
    set timeMinute=%%b 
    set timeSeconds=%%c 
) 
rem Convert HH:MM to minutes + 1 
set /A newTime=timeHour*60 + timeMinute + 1 
rem Convert new time back to HH:MM 
set /A timeHour=newTime/60, timeMinute=newTime%%60 
rem Adjust new hour and minute 
if %timeHour% lss 10 set timeHour=0%timeHour% 
if %timeMinute% lss 10 set timeMinute=0%timeMinute% 

schtasks /create /tn "Task1" /sc DAILY /st %StartTime% /tr "Task 1" 
schtasks /create /tn "Task2" /sc DAILY /st %timeHour%:%timeMinute% /tr "Task 2" 

使用JosefZ提供的鏈接後,我想出了代碼的這種變化,非常感謝你指着我在正確的方向。

0

這裏有一個近防彈的解決方案,現在隨着用戶輸入的基本有效性測試:

@ECHO OFF >NUL 
:loopStartTime 
set "startTime=%time:~0,5%" 
echo Need Task Start Time in 24 hour format 
echo (example 14:00 for 2pm, 08:00 for 8am) 
set /p "startTime=Please enter Start Time (default=%StartTime: =%) " 
::: test user's input and force repeat in case of extra serious error 
::: e.g. mistyped `09/00` or `09%00` or `09<00` etc. instead of `09:00` 
set "_val_test=%startTime: =%" 
set /A "_val_test=1%_val_test::=+%" || goto :loopStartTime 

::: format startTime to become a valid valid time in HH:mm (24 hours) pattern 
call :addminutes startTime "%startTime: =%" 0 
::: previous call with "quoted" 2nd parameter as user's input might contain 
::: a valid parameter delimiter, i.e. one or more from commonly used 
::: Comma `,` Semicolon `;` Equals `=` Space ` ` Tab `  ` 
echo schtasks /create /tn "Task1" /sc DAILY /st %StartTime% /tr "Task 1" 

call :addminutes startTim2 %startTime% 1 
echo schtasks /create /tn "Task2" /sc DAILY /st %StartTim2% /tr "Task 2" 

goto :eof 
:addminutes 
::::::::::::::::::::::::::::::::::::::::::::::::::: 
::: %1 (byref, obligatory) output variable name 
::: %2 (byval, optional) valid time HH:mm (24 hours) 
::: %3 (byval, optional) minutes to add 
::::::::::::::::::::::::::::::::::::::::::::::::::: 
SETLOCAL enableextensions disabledelayedexpansion 
set "sTime=%~2" 
set /A "sPlus=100%~3%%100" 2>nul 
for /F "tokens=1-2 delims=:. " %%a in ("%sTime%") do (
    set /A "timeHour=100%%a%%100" 2>nul 
    set /A "timeMinute=100%%b%%100" 2>nul 
) 
::: Convert HH:MM to minutes + %3 
set /A "newTime=(timeHour*60)+timeMinute+sPlus" 
::: Convert new time back to HH:MM 
set /A "timeHour=newTime/60%%24" 
set /A "timeMinute=newTime%%60" 
::: Adjust new hour, minute and return value 
set "timeHour=00%timeHour%" 
set "timeMinute=00%timeMinute%" 
set "sTime=%timeHour:~-2%:%timeMinute:~-2%" 
::: do not change next line 
ENDLOCAL&set "%~1=%sTime%"&goto :eof 

注意。用戶可以輸入幾乎任何東西來響應set /P; :addminutes程序的輸出總是以HH:mm(24小時)模式(例如,

  • <Enter>結果到當前時間,比照。初始set "startTime=%time:~0,5%"
  • 15結果15:00
  • 9:9結果09:09
  • any nonsens結果00:00

編輯:更多的評論在代碼

:addminutes過程基於Aacinianswer