0

我有一个批处理脚本,它将命令写入 .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中是否有任何命令或函数?

感谢你的帮助。

4

2 回答 2

0

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

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

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

于 2013-05-06T18:46:29.743 回答
0

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

于 2013-05-07T20:24:59.487 回答