2012-01-04 118 views
3

我的程序出现问题,每6小时发生一次或两次。所以我想知道是否有办法让批处理脚本能够在后台不断运行,并且只能执行早上6点,中午6点,午夜6点给出的命令。批处理脚本,在特定时间进入睡眠状态

我的剧本只是一个命令,它是

"C:\Program Files\WinSCP\WinSCP.com" /command "open %INPUT%" "get /etc/logs/*" "get /etc/network/interfaces" "bye" 

我已经打破了我的脖子,似乎无法找出一个办法让程序睡眠和未用完的CPU在一定时间内的一天。

回答

2

下批处理文件6,12,18和0小时执行命令:

@echo off 
:waitNextRun 
for /F "delims=:" %%h in ("%time%") do set hour=%%h 
set /A mod6=hour %% 6 
if not %mod6% == 0 goto waitNextRun 

"C:\Program Files\WinSCP\WinSCP.com" /command "open %INPUT%" "get /etc/logs/*" "get /etc/network/interfaces" "bye" 

:waitNextHour 
for /F "delims=:" %%h in ("%time%") do if %hour% == %%h goto waitNextHour 
goto waitNextRun 

然而,该批处理文件不“在后台”运行,但作为一个正常的批处理文件。您可以通过使用以下命令启动CPU,从而最大限度地减少其CPU使用量:

START "Run WinSCP every six hours" /MIN /LOW theBatchFile 
0

使用内置于操作系统中的调度。在Linux下,它在窗口下是cron,搜索Scheduler。这将让你在任何你喜欢的时间表上运行任意脚本。

+0

在Windows中,通过AT命令访问调度程序。但是,它只允许在特定的日期和时间安排任务(它不允许在任何时间间隔重复任务),所以需要在0,6,12和18小时内执行AT四次,并且包含在每次执行中所有的月份日期(从1到31),并且每月重复这个程序。此外,它还需要Windows Schedule服务正在运行。 – Aacini 2012-01-05 04:56:24

+0

@Aacini - 感谢列出命令。我只熟悉用于配置调度程序的GUI。我不确定我使用的是哪个版本的Windows,但我很确定我可以安排脚本在一天中执行多次,以及其他一系列选项。有可能,在引擎盖下,它的结局与你描述的一样,但我不知道。此外,关于服务必须运行的好点。它需要,但作为一项服务,它不使用许多资源。 – cdeszaq 2012-01-05 14:27:58

+0

为什么在尝试调度程序之前不尝试我的批处理解决方案?要做到这一点,你只需要复制批处理文件并输入一个开始命令!另外,如果以后使用调度程序,这将是一个很好的比较点。你确定调度程序比Batch解决方案表现得更好吗?这个问题的答案是普遍的兴趣! ;-) – Aacini 2012-01-06 20:04:39

1

正确的做法可能是设置cron任务,或者如果您使用的是Windows并且无法访问cron,通过CygWin,然后使用task scheduler

相关问题