2013-05-06 19 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 метода, чтобы скопировать файл в пустой почтовый файл, созданный.

Например, если для хранения файла размером 500 МБ требуется 30 секунд, я не хочу, чтобы сценарий ожидал 30 секунд, когда размер файла составляет 100 МБ.

Можем ли мы заставить сценарий ждать столько времени, сколько нужно для zip-файла? Есть ли какая-либо команда или функция в VBScript?

Цените свою помощь.

+0

Вы всегда делаете это на одном компьютере и являетесь содержимым файла, который вы закладываете в основном так же? Если это так, вы можете выполнить некоторые сравнения производительности для архивирования 100 200 300 400, ect meg-файлов и соответственно установить сон. –

+0

Всегда на одном компьютере. Образцы и контент будут похожи. Могут быть несколько файлов разных размеров. – Shrik

+0

Вы добавляете несколько файлов в один почтовый индекс или вы создаете один zip-файл с 1 файлом в нем? –

ответ

0

Вам не нужно спать, CScript zipIt.vbs будет работать до тех пор, пока все файлы не будут сжаты.

Однако, если вы столкнулись с проблемами синхронизации, я бы предложил вам извлечь .DeleteFile изнутри vbScript и сделать это в пакетном скрипте с помощью утилиты del.

Другим решением было бы изменить командный файл на один большой vbScript.

+0

Спасибо за быстрый ответ. Если я не даю достаточно спать, vbScript будет вызывать ошибку с разрешенным разрешением в этой строке: 'echo oFileSys.DeleteFile FileToZip >> zipIt.vbs' и не удаляет файл. Как вы сказали, позвольте мне попробовать сделать это в пакетном скрипте. Скоро вернусь, что бы я ни получил. – Shrik

+0

Что такое утилита, которую вы упомянули? Я попробовал с 'del '%% c" 'Он удаляет файл, как ожидалось. Но проблема заключается в том, что CScript не ждет сжатия файла. Он ждет время сна и возвращается к пакетному сценарию. Любая другая идея? – Shrik

0

Вам нужна либо партия, либо vbs, если вы используете winrar с опцией -m, которая перемещает все файлы в конце фазы сжатия в архиве (так разрушает оригинал). Я знаю, что принцип winrar должен быть оплачен, и его часто превзошли современные реализации zip, такие как 7zip, но часто это все же самое лучшее.

+0

Сценарий должен планироваться для запуска в Windows Server 2008, и нет возможности использовать какой-либо сторонний инструмент. Задача должна выполняться с использованием встроенных возможностей Windows. Спасибо за предложение. – Shrik

Смежные вопросы