如何创建一个批处理文件定时器来在一天内执行/调用另一个批处理文件

18
我如何创建一个批处理文件计时器,以便在一天中调用/执行另一个批处理文件?也许可以指定运行的时间但不在周末运行?必须在系统时间上运行,也可以是.cmd在XP服务器2003上运行。
9个回答

35

对于脚本的计时器部分,我强烈推荐使用:

echo.
echo Waiting For One Hour... 
TIMEOUT /T 3600 /NOBREAK
echo.
echo (Put some Other Processes Here)
echo.
pause >nul

这个脚本会等待1小时 (3600 秒),然后继续运行,用户不能按任何按钮绕过计时器 (除了CTRL+C)。
你可以使用


Timeout /t 3600 /nobreak >nul

如果您不想在屏幕上看到倒计时。

3
不错。我刚刚在搜索简单的批处理文件计时器解决方案时找到了这个 - 运行得很好,谢谢!编辑:我正在使用它与goto-"loop"一起创建一个简单的脚本,定期更新我的SVN工作副本。 - alexander.biskop

11
我建议使用计划任务面板(scheduler control panel),而非命令行或其他应用程序。
控制面板-> 计划任务。

1
schtasks 可以从命令行中用来操作“计划任务”。 - Ken Gentle

4
以下是一个批处理文件,它将等待1分钟,检查日期,然后执行某个操作。它使用PING.EXE,但不需要任何未包含在Windows中的文件。
@ECHO OFF

:LOOP
ECHO Waiting for 1 minute...
  PING -n 60 127.0.0.1>nul
  IF %DATE:~0,3%==Mon CALL SomeOtherFile.cmd
  IF %DATE:~0,3%==Tue CALL SomeOtherFile.cmd
  IF %DATE:~0,3%==Wed CALL SomeOtherFile.cmd
  IF %DATE:~0,3%==Thu CALL WootSomeOtherFile.cmd
  IF %DATE:~0,3%==Fri CALL SomeOtherFile.cmd
  IF %DATE:~0,3%==Sat ECHO Saturday...nothing to do.
  IF %DATE:~0,3%==Sun ECHO Sunday...nothing to do.
GOTO LOOP

它在许多方面都可以改进,但这可能会让您开始入门。


3

AT命令可以实现这一点,但这正是计划任务GUI所用的。在cmd窗口中输入“help at”以获取详细信息。


1
@echo off
:Start # seting a ponter
title timer  #name the cmd window to "Timer"
echo Type in an amount of time (Seconds)  
set /p A=  #wating for input from user
set B=1  

cls  
:loop  
ping localhost -n 2 >nul  #pinging your self for 1 second
set /A A=A-B  #sets the value A - 1
echo %A%  # printing A
if %A% EQU 0 goto Timesup  #if A = 0 go to ponter Timesup eles loop it
goto loop

:Timesup  #ponter Timesup
cls  #clear the screen
MSG * /v "time Is Up!"  #makes a pop up saying "time Is Up!"
goto Exit  #go to exit

:Exit 

通过使用“ping localhost -n 2 >nul”命令,程序会“休眠”1秒钟,我们可以利用这个方法来减少变量A的值。 - nocktok toker

1
更好的代码不涉及 ping:
SET COUNTER=0
:loop
SET /a COUNTER=%COUNTER%+1
XCOPY "Server\*" "c:\minecraft\backups\server_backup_%COUNTER%" /i /s
timeout /t 600 /nobreak >nul
goto loop

600秒等于10分钟,但您可以根据需要设置任何时间。


1
@echo off
:Start
title timer
color EC
echo Type in an amount of time (Seconds)
set /p time=

color CE

:loop
cls
ping localhost -n 2 >nul
set /a time=%time%-1
echo %time%
if %time% EQU 0 goto Timesup
goto loop

:Timesup
title Time Is Up!
ping localhost -n 2 >nul
ping localhost -n 2 >nul
cls
echo The Time is up!
pause
cls
echo Thank you for using this software.
pause
goto Web
goto Exit

:Web
rem type ur command here

:Exit
Exit
goto Exit

1
我通过编写一个小型的C#应用程序来实现,它会定期唤醒以执行任务 -- 不知道是否可以通过批处理文件实现,而无需下载扩展以支持休眠命令。(对于我的目的,Windows任务计划程序无法正常工作,因为启动的应用程序没有可用的图形上下文。)

1
为什么启动调度程序需要一个图形上下文?我不明白这有什么区别。 - Tim
在我的情况下,我需要启动一个应用程序来运行自动化测试,其中包含大量图形(医学影像)。因此,如果没有图形上下文,它们将无法运行。 - Jeff Kotula

0

你也可以这样做>

@echo off
:loop
set a=60
set /a a-1
if a GTR 1 (
echo %a% minutes remaining...
timeout /t 60 /nobreak >nul
goto a
) else if a LSS 1 goto finished
:finished
::code
::code
::code
pause>nul

或者类似这样的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接