如何在VBScript中动态设置延迟

时间:2013-05-06 17:41:17

标签: file vbscript batch-file windows-server-2008

我有一个批处理脚本,可以将命令写入.vbs文件并在最后执行。 VBScript的任务是压缩文件并删除原始文件。这是代码:

FOR %%c in (%1%filename*.*) DO ( 
REM zip file which is not of current date
ECHO "%%c"|FINDSTR "%CurrentDate%" >nul
IF ERRORLEVEL 1 (
echo Option Explicit >> zipIt.vbs
echo Dim FileToZip, Result >> zipIt.vbs
echo Dim oShell >> zipIt.vbs
echo Dim file >> zipIt.vbs
echo Dim oFileSys >> zipIt.vbs
echo Dim winShell >> zipIt.vbs
echo FileToZip = "%%c" >> zipIt.vbs
echo Result = "%%c.zip" >> zipIt.vbs
echo Set oShell = CreateObject("WScript.Shell"^) >> zipIt.vbs
echo Set oFileSys = CreateObject("Scripting.FileSystemObject"^) >> zipIt.vbs
echo Set file = oFileSys.CreateTextFile(Result, True^) >> zipIt.vbs
echo file.Write "PK" ^& Chr(5^) ^& Chr(6^) ^& String(18, 0^) >> zipIt.vbs
echo file.Close >> zipIt.vbs
echo Set file = nothing >> zipIt.vbs
echo set winShell = createObject("shell.application"^) >> zipIt.vbs
Timeout /T 10
echo winShell.namespace(Result^).CopyHere FileToZip >> zipIt.vbs
Timeout /T 10
echo wScript.Sleep(30000^) >> zipIt.vbs

REM Delete the file
echo oFileSys.DeleteFile FileToZip >> zipIt.vbs
CScript zipIt.vbs

要压缩的文件大小不同。 因此,对于较小尺寸的文件,等待30秒将会很棒。

echo winShell.namespace(Result^).CopyHere FileToZip >> zipIt.vbs
Timeout /T 10
echo wScript.Sleep(30000^) >> zipIt.vbs

REM Delete the file
echo oFileSys.DeleteFile FileToZip >> zipIt.vbs

CopyHere方法需要休眠时间才能将文件复制到创建的空zip文件中。

例如,如果压缩大小为500 MB的文件需要30秒,那么当文件大小为100 MB时,我不希望脚本等待30秒。

我们可以让脚本等待压缩文件所需的时间吗? VBScript中是否有任何命令或功能?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您不需要睡眠,CScript zipIt.vbs将一直运行,直到所有文件都被压缩。

但是,如果您遇到计时问题,我建议您从vbScript中取出.DeleteFile,并使用del实用程序在批处理脚本中执行。

另一个解决方案是将批处理文件更改为一个大的vbScript。

答案 1 :(得分:0)

如果使用带有-m选项的winrar,则需要批处理或vbs,这会将压缩阶段结束时的所有文件移动到拱门(因此会破坏原始文件)。我知道winrar是必须支付的原则,并且通常比7zip等现代拉链实现更好,但它通常仍然是最好的。