2013-05-06 164 views
0

我有一个批处理脚本,它会将命令写入.vbs文件并在最后执行它。 VBScript的任务是压缩文件并删除原始文件。以下代码:如何在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文件。

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

我们可以让脚本等待多少时间来压缩文件吗? VBScript中有任何命令或函数吗?

感谢您的帮助。

+0

你是否总是在同一台计算机上执行此操作,并且所压缩文件的内容基本相同?如果是这样,你可以做一些性能比较压缩100,200,300,400等电子文件,并相应地设置睡眠。 – 2013-05-07 13:41:54

+0

总是在同一台计算机上进行。模式和内容将会类似。可以有多个不同大小的文件。 – Shrik 2013-05-08 05:42:44

+0

您是将多个文件添加到一个zip文件中,还是创建一个带有一个文件的zip文件? – 2013-05-08 11:28:48

回答

0

你不应该需要睡眠,CScript zipIt.vbs会运行,直到所有的文件被压缩。

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

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

+0

感谢您的快速响应。如果我没有给予足够的睡眠,vbScript将在此行抛出Permission denied错误:'echo oFileSys.DeleteFile FileToZip >> zipIt.vbs'并且无法删除文件。正如你所说的让我尝试在批处理脚本中完成它。无论我得到什么,我都会很快回来。 – Shrik 2013-05-07 02:50:11

+0

你提到的rem实用程序是什么?我试着用'del'%% c“'它按预期删除文件。但问题是,CScript不会等待文件被压缩。它等待休眠时间并返回到批处理脚本。任何其他想法? – Shrik 2013-05-07 06:41:28

0

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

+0

该脚本必须计划在Windows Server 2008上运行,并且没有使用任何第三方工具的范围。该任务需要使用Windows内置功能来完成。感谢您的建议。 – Shrik 2013-05-08 05:26:03