【发布时间】:2013-05-06 17:41:17
【问题描述】:
我有一个批处理脚本,它将命令写入 .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中有什么命令或函数吗?
感谢您的帮助。
【问题讨论】:
-
您是否总是在同一台计算机上执行此操作,您要压缩的文件内容是否基本相同?如果是这样,您可以对压缩 100,200,300,400 等 meg 文件进行一些性能比较,并相应地设置睡眠。
-
总是在同一台电脑上做。模式和内容将是相似的。可以有多个不同大小的文件。
-
您是将多个文件添加到一个 zip 文件中,还是创建一个包含 1 个文件的 zip 文件?
-
另外,如果它是一个只有一个文件的单个 zip 文件,它是目录中唯一的文件还是同一目录中的其他文件没有被压缩?
-
目录中有很多不应该压缩的文件。名称中具有相同模式的文件
%1%filename*.*被压缩。每次for循环运行并在 zip 文件中添加单个文件。
标签: file vbscript batch-file windows-server-2008