我有一个批处理脚本,将写入.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.vbsCopyHere方法需要睡眠时间将文件复制到创建的空zip文件中。
例如,如果压缩一个500MB大小的文件需要30秒,那么当文件大小为100MB时,我不希望脚本等待30秒。
我们可以让脚本等待压缩文件所需的时间吗?VBScript中有什么命令或函数吗?
感谢你的帮助。
发布于 2013-05-07 02:46:30
您不需要休眠,CScript zipIt.vbs将一直运行,直到所有文件都被压缩。
但是,如果您确实遇到了计时问题,我建议您从vbScript中取出.DeleteFile,然后在批处理脚本中使用del实用程序执行此操作。
另一种解决方案是将批处理文件更改为一个大的vbScript。
发布于 2013-05-08 04:24:59
如果你使用带有-m选项的winrar,你需要一个批处理或一个vbs,它会将压缩阶段结束时的所有文件移动到拱门(这样会破坏原始文件)。我知道winrar的原则是必须付费的,而且它的性能经常被像7zip这样的现代zip实现所超越,但它仍然是最好的。
https://stackoverflow.com/questions/16404156
复制相似问题