2013-05-06 23 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