kraeved
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Тут искали способ создать ZIP в командной строке средствами Windows 7. Т.к. магической команды нет, то тянемся до функции ОС через PowerShell 2+ или Windows Script Host. Делюсь гибридным батником, использующим JScript. Код: <!-- : :: zip.cmd 2021-05-20 :: Скрипт для сжатия файлов и папок с помошью ZIP, встроенного в Windows :: Нет поддержки *.* и Unicode имён типа Bjork (ограничение ОС) :: Проверен на Windows XP x86, Windows 7 x64 @cscript //nologo "%~f0?.wsf" %* & goto :eof --> <job><script language="JScript"> with (WScript) { // Проверяем наличие аргументов и показываем инструкцию, если их не хватает if (Arguments.Count() < 2) { Echo("Usage: zip filename.zip [ file1 dir2 ... *.* not supported ]"); Quit(); } var myFSO = new ActiveXObject("Scripting.FileSystemObject"); var mySHELL = new ActiveXObject("Shell.Application"); var myZIPNAME = Arguments.Item(0); // Проверяем наличие расширения zip у имени архива if (!/\.zip$/i.test(myZIPNAME)) { Echo("ERROR. Archive extension is not zip: " + myZIPNAME); Quit(); } // Проверяем существование объектов для сжатия for (var i = 1; i < Arguments.Count(); i++) { var myOBJ = Arguments.Item(i); if (!myFSO.FileExists(myOBJ) && !myFSO.FolderExists(myOBJ)) { Echo("ERROR. Invalid path: " + myOBJ); Quit(); } } // Создаём архив (если уже существует, то выходим с ошибкой) var myZIPFILE = myFSO.CreateTextFile(myZIPNAME,false); myZIPFILE.Write("PK" + String.fromCharCode(5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)); myZIPFILE.Close(); // Добавляем в архив файлы и папки myZIPFILE = mySHELL.NameSpace(myFSO.GetAbsolutePathName(myZIPNAME)); for (var i = 1; i < Arguments.Count(); i++) { myZIPFILE.CopyHere(myFSO.GetAbsolutePathName(Arguments.Item(i))); while (true) { Sleep(500); try { myFSO.OpenTextFile(myZIPNAME,8).Close(); break; } catch(e) { } } } } </script></job> |
| Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 22:57 20-05-2021 | Исправлено: kraeved, 00:18 23-05-2021 |
|