2007年8月8日星期三

帮我写一个批处理文件 - 批处理sleep

帮我写一个批处理文件
悬赏分:0 - 解决时间:2007-6-12 11:10
如果c://a.txt文件存在,延迟10秒,复制a.txt从c: 到d:
如果d://a.txt已经存在结束任务
问题补充:大家帮帮忙啊,谢谢大家了
提问者: miss8850 - 助理 三级
最佳答案
@echo off
if exist c:\a.txt (if not exist d:\a.txt (copy c:\a.txt d:\a.txt))

时间你自己想办法加上去 延迟加上去好象不操作了。!

在批处理中实现等待/延迟/暂停(zz)2006年12月29日 星期五 10:55(以下所有的程序均以等待/延迟/暂停2秒示例)
1、比较传统的设计思路,利用for解析变量%time%并存为一个时间点,再利用set计算两个时间点的时间差,最后用if判断时间差是否达到设定的暂停时间。时间精度为0.01秒,适用平台为WinNT/2K/XP/2003。
@echo off
setlocal enableextensions
echo %time%
call :ProcDelay 200
echo %time%
goto :EOF

:ProcDelay delayMSec_
setlocal enableextensions
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
:_procwaitloop
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
set /a diff_=%now_%-%start_%
if %diff_% LSS %1 goto _procwaitloop
endlocal & goto :EOF

2、使用Windows的VBS脚本中的sleep函数,可以动态创建这个VBS脚本,然后用Windows脚本宿主的命令行版本调用它。时间精度为0.001秒,使用平台为Win9x/WinNT系列。
@echo off & setlocal enableextensions enabledelayedexpansion
echo WScript.Sleep 2000 > %temp%\tmp$$$.vbs
echo %time%
cscript //nologo %temp%\tmp$$$.vbs
echo %time%
for %%f in (%temp%\tmp$$$.vbs) do if exist %%f del %%f
endlocal & goto :EOF

3、如果你的Windows系统中正常安装了网卡的TCP/IP协议,也可以使用ping定时发送测试包,以此达到暂停一定时间的目的;-n后的 数字是发送包的数目,根据植树原则,为暂停秒数加一,此法每秒有0.5%的偏差。时间精度为1秒,使用平台为Win9x/WinNT系列。
ping -n 3 127.0.0.1>nul

4、使用choice的缺省选择等待功能实现暂停,但它有个缺点,就是不能在等待途中按键,否则暂停的倒计时将自动终止。时间精度为1秒,适用平台为MS-DOS/Win9x/WinNT系列。
choice /t:y,2 /n >nul

5、德国人Herbert Kleebauer给出了一个通用方案,通过间接产生一个exe程序来实现延迟,这个程序分为DOS和Win两个模块。延迟精度为0.001秒,适用平台为MS-DOS/Win9x/WinNT。代码见附件

附件:


:: Sleep.bat - Sleep/Delay/Wait n seconds
:: Herbert Kleebauer(Germany) - 2005/05/29
:: Modified by Will Sort - 2005/06/02
@echo off
echo q | debug>nul
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>sleep.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>sleep.com
echo T}{z~~@GwkBG@OEKcUt`~}@MqqBsy?seHB~_Phxr?@zAB`LrPEyoDt@Cj?>>sleep.com
echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>sleep.com
echo LFvAURQ?OYLTQ@@?~QCoOL~RDU@?aU?@{QOq?@}IKuNWpe~FpeQFwH?Vkk>>sleep.com
echo _GSqoCvH{OjeOSeIQRmA@KnEFB?p??mcjNne~B?M??QhetLBgBPHexh@e=>>sleep.com
echo EsOgwTLbLK?sFU`?LDOD@@K@xO?SUudA?_FKJ@N?KD@?UA??O}HCQOQ??R>>sleep.com
echo _OQOL?CLA?CEU?_FU?UAQ?UBD?LOC?ORO?UOL?UOD?OOI?UgL?LOR@YUO?>>sleep.com
echo dsmSQswDOR[BQAQ?LUA?_L_oUNUScLOOuLOODUO?UOE@OwH?UOQ?DJTSDM>>sleep.com
echo QTqrK@kcmSULkPcLOOuLOOFUO?hwDTqOsTdbnTQrrDsdFTlnBTm`lThKcT>>sleep.com
echo @dmTkRQSoddTT~?K?OCOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\EH>>sleep.com
echo {zpQpKGk?Jbs?FqokOH{T?jPvP@IQBDFAN?OHROL?Kj??pd~aN?OHROd?G>>sleep.com
echo Q??PGT~B??OC~?ipO?T?~U?p~cUo0x>>sleep.com
sleep.com>sleep.exe
del sleep.com
echo wait 2 seconds:
sleep.exe 2000




其他回答
共 1 条
可以用 ping -n 10 127.1 来延时

@echo off
if exist c:\a.txt ping -n 10 127.1 & if not exist d:\a.txt copy c:\a.txt d:\a.txt






Windows命令行奇技淫巧之 Sleep

作者:兔毛猫 链接:http://www.2maomao.com/blog/windows-tips-sleep-command/

写批处理(Batch)文件的时候,经常会需要在其中等上几秒钟,但是Windows 2000/xp/2003 都没有Sleep命令,怎么办呢?

以前我都是写个Sleep.exe,接受一个毫秒数做参数的,内部调用Sleep win32API。这种做法的坏处是:发布你的批处理文件给别人用的时候,你得把Sleep.exe和批处理文件放在一起。这让本来贴上一段代码就搞定的 活,经常变成需要添个附件(sleep.exe)才能搞定。

今天发现其实很多人有这个困扰,还有一些奇技淫巧在其中:
比如这篇文章提到的方法:

@ping 127.0.0.1 -n 3 -w 1000 > nul

这样就可以不动声色的等待三秒了(不太精准,但是一般也够用了)

再比如这位才子提到的安装Windows Server 2003 Resource Kit Tools的方法,唔,这个比自己写一个sleep.exe强不了多少。

还有这位仁兄的方法:
写一个Sleep.vbs,然后调用它。
其实还可以使用WScript更进简略而且更进一步,直接就Sleep三秒:

@ECHO Wscript.Sleep(3000) > sleep.vbs
@START /w wscript.exe sleep.vbs
@DEL /Q sleep.vbs

孔乙己online睡眼惺忪的问:睡(sleep)姿有108种,你知道吗?



没有评论: