2015-05-14 8 views
0

Я хочу закрепить папку с помощью командного файла. Вот мой код zip.bat:пакетный файл для сжатия папки в том же каталоге

CScript zip.vbs E:\app E:\app.zip 

zip.vbs имеет следующий код:

Set objArgs = WScript.Arguments 

InputFolder = objArgs(0) 

ZipFile = objArgs(1) 

'Create empty ZIP file. 

CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar) 


Set objShell = CreateObject("Shell.Application") 

Set source = objShell.NameSpace(InputFolder).Items 

objShell.NameSpace(ZipFile).CopyHere(source) 

'Required! 

wScript.Sleep 2000000 

Этот код ziiping папку правильно, но я не хочу упоминать любое имя диска. Я хочу, чтобы на любом диске, если я сохранил папку с файлом bat bat n, после запуска файла bat, он должен застегнуть папку. Есть ли код для этого ???

ответ

0

Вам нужно будет добавить FileSystemObject и использовать GetAbsolutePathName function - shell.application namespaces не принимает относительные пути.

Хотя использование сна - плохая идея - это либо сделает слишком медленным сценарий, либо прервет процесс zipping. Лучшая идея состоит в том, чтобы подсчитать элементы в источнике и в месте назначения, поскольку zipping является транзакционным и количество файлов прочный способ проверить, выполнена ли операция.

Вы можете также проверить мой zipjs.bat который также использует Shell.Application но все упаковано в гибридном jscript\.bat сценария (он даже будет не создавать временные файлы) .Он может обрабатывать относительные пути, и сравнительно прочный (один из наиболее часто используемых сценариев, которые я написал - так что я имел некоторую обратную связь и нужно исправить многочисленными баги :-))

Подробнее здесь: How can I compress (/ zip) and uncompress (/ unzip) files and folders with batch file without using any external tools?

Set objArgs = WScript.Arguments 
set fso=CreateObject("Scripting.FileSystemObject"): 
InputFolder = fso.GetAbsolutePathName(objArgs(0)): 



ZipFile = objArgs(1) 

'Create empty ZIP file. 

CreateObject("Scripting.FileSystemObject").CreateTextFile(ZipFile, True).Write "PK" & Chr(5) & Chr(6) & String(18, vbNullChar) 


Set objShell = CreateObject("Shell.Application") 

Set source = objShell.NameSpace(InputFolder).Items 

objShell.NameSpace(ZipFile).CopyHere(source) 

'Required! 

wScript.Sleep 2000000 
+0

может у поделиться простым кодом. , который u предоставлено не работает – Dimple

+0

@ Простой - что-то не работает с zipjs.bat? Можете ли вы предоставить больше информации. Обновите свой ответ. – npocmaka

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