Board logo

标题: [已结]每隔三分钟拷贝文件的批处理 [打印本页]

作者: yishu     时间: 2006-2-23 07:15    标题: [已结]每隔三分钟拷贝文件的批处理
我想在dos下用批处理实现每隔三分钟拷备c:\log\log.log到d:\logbak\log.log
应该如何实现!


───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:修改标题:《19227 - 问个超高难的问题!》
处罚:因属论坛新人,不予积分处罚
提示:请访问 {7326}论坛新手必读,所有人的基本行为准则
───────────────── 版务记录 ─────────────────


Last edited by willsort on 2006-3-30 at 15:44 ]

作者: tigerpower     时间: 2006-2-23 18:55
使用 sleep :

@echo off
:cycle
copy /y c:\log\log.log d:\logbak\log.log
sleep 180
goto cycle
附件 1: sleep.zip (2006-2-23 18:55, 7.49 KiB, 下载附件所需积分 1点 ,下载次数: 74)

作者: weilong888     时间: 2006-2-23 19:30
这东西利害。

作者: JonePeng     时间: 2006-2-23 20:55
2楼的程序的缺点是不能实现后台复制,好像还不是符合楼主的要求哦 <img src="images/smilies/face-raspberry.png" align="absmiddle" border="0">
我觉得楼主的目标应该设计一个这样的程序:调用中断处理,常驻内存,实时监控,后台复制,并且能继续运行其它程序。这类似于Windows的计划任务。批处理很难做到,C语言就可以。

Last edited by JonePeng on 2006-2-23 at 20:56 ]

作者: doscc     时间: 2006-3-27 19:05
@echo off
copy c:\log\log.log d:\logbak\log.log

set mytime=%time:~3,2%
set wintime=%time:~0,3%

:t
set /A mytime+=3
if "%mytime%" GTR 60 set /A mytime-=60
if "%mytime%" =="60" set /A mytime=00

:m
set times=%time:~0,5%
set ti=%times:~3%
if "%ti%"=="00" set wintime=%time:~0,3%
if "%wintime%%mytime%"=="%times%" copy c:\log\log.log d:\logbak\log.log && goto t
goto m

Last edited by doscc on 2006-3-27 at 22:00 ]

作者: chenall     时间: 2006-3-27 23:16
我也来贴一个

@echo off
:start
copy /y c:\log\log.log d:\logbak\log.log
choice /T 180 /d y
goto start

作者: doscc     时间: 2006-3-28 22:51
这么好用的命令 choice

可是在我的XP 里的 cmd 没有这个命令啊

不知道为什么?

在2003就有

作者: Climbing     时间: 2006-3-28 23:30
复制一个过去就行了,choice好象有两个版本。

作者: 3742668     时间: 2006-3-29 00:51
XP直接就用ping好了
ping 1.1.1.1 -w 3000 -n 1
设定n的次数为1次,可尽量地使时间精确。

作者: kingchain     时间: 2006-3-29 11:06
Originally posted by chenall at 2006-3-27 23:16:
我也来贴一个

@echo off
:start
copy /y c:\log\log.log d:\logbak\log.log
choice /T 180 /d y
goto start

j此方法好!

请问你的 {copy to slip}怎么搞的啊?想学<img src="images/smilies/face-raspberry.png" align="absmiddle" border="0">

Last edited by kingchain on 2006-3-29 at 11:07 ]

作者: chenall     时间: 2006-3-29 17:07
加code代码
例子:
[code]
@echo off
:start
copy /y c:\log\log.log d:\logbak\log.log
choice /T 180 /d y
goto start
[/code]

作者: doscc     时间: 2006-3-29 17:33
 
请问 chenall
"
" 的作用是什么?

----------------------------------------
哦知道了.



Last edited by doscc on 2006-3-29 at 17:37 ]

作者: warmoon     时间: 2006-4-4 10:35
Originally posted by JonePeng at 2006-2-23 20:55:
2楼的程序的缺点是不能实现后台复制,好像还不是符合楼主的要求哦 :P
我觉得楼主的目标应该设计一个这样的程序:调用中断处理,常驻内存,实时 ...


那我是菜菜鸟,pengpeng能不能传个C的样本上来我:P好好学学?谢谢阿!

作者: pizigao     时间: 2006-4-9 01:00
不错不错~收下了

作者: fpqcj     时间: 2007-3-12 00:53    标题: 都是高手,学习学习呀!!!
都是高手,学习学习呀!!!

作者: happygogo     时间: 2007-3-13 05:47
太强了啊

作者: axi     时间: 2007-3-13 06:52
向楼主提供一个VBS脚本如下:


Const OverwriteExisting = True
Set objFSO = CreateObject("Scripting.FileSystemObject")
do
objFSO.CopyFile "c:\log\log.log" , "d:\logbak\log.log", OverwriteExisting
WScript.Sleep (1000*60*3) '延时3分钟
loop


把以上代码复制到记事本中,再另存为 copy.vbs 双击此文件即可在后台执行复制文件,要注意是D:\logbak目录一定要存在,否则出错。要终止,请关闭 wScript.exe 进程。

作者: anqing     时间: 2007-3-13 08:21
Const OverwriteExisting = True
第一句代表什么不太明白?

作者: axi     时间: 2007-3-13 12:23
首先创建一个名为 OverwriteExisting 的常量并将其值设置为 True,再使用此常量告诉 FileSystemObject 可以对目标文件的现有实例进行覆盖。 do ... loop 语句就是当条件为 True 时或条件变为 True 之前,重复执行语句块,在这里就是重复执行复制文件(CopyFile)命令。

Last edited by axi on 2007-3-13 at 07:40 AM ]

作者: DFWYYY     时间: 2009-5-26 02:23    标题: 下载看看!
下载看看!

作者: wtp791211     时间: 2009-5-26 07:07
4楼的朋友说得有道理,就是有个批DOS窗口在那里确实烦人,不过可以用这个办法,把2楼朋友的批处理,用一个DOS转EXE的软件,转成EXE执行,这样就可以不用看到DOS窗口了.我个人觉得这样比较完美

作者: msg753     时间: 2009-5-26 11:51
呵呵新手来看看。

作者: mfcliu     时间: 2009-5-27 00:16
学习了

作者: abc2121     时间: 2009-5-27 03:19
good 学习中~