![]() |
Извлечь из архива только определенную папку/определенный файл
Здравствуйте.
Пожалуйста, если это возможно, напишите мне, как при помощи *.bat или *.cmd файла из архива UpdatePack-XPSP3-Rus-13.6.15.7z (Наборы - UpdatePack-XPSP3-Rus версия 13.6.15) в папку C:\1 извлечь только папку Addons с сохранением структуры папки Addons То есть на выходе получаем папку C:\1, в которой находиться только папка Addons с сохранением структуры папки Addons. Больше ничего, кроме папки Addons в папке C:\1 не должно быть. Спасибо. |
Распаковать архив во временную папку, скопировать нужный объект, удалить лишнее
|
Цитата:
То, что Вы предлагаете, итого 3 действия - это самый долгий путь. Средний по времени путь: распаковать полностью весь архив+удалить лишнее, итого 2 действия. Самый оптимальный по времени путь, то, что мне хочется - распаковать только одну нужную мне папку, итого 1 действие. Чем меньше действий - тем быстрее результат. Спасибо. |
Я, собственно, не понял, в чём состоит проблема?
Код:
"%ProgramFiles%\7-Zip\7z.exe" x "D:\Install\UpdatePack-XPSP3-Rus\UpdatePack-XPSP3-Rus 13.6.15\UpdatePack-XPSP3-Rus-13.6.15.7z" "Addons\*" -o"C:\1" |
Цитата:
Как раз этот код мне и был нужен. Попутный вопрос: а возможно извлечь только все файлы, находящиеся на одном уровне с папкой Addons и папкой Files без распаковки папок Addons и Files? Спасибо. |
Цитата:
|
Цитата:
|
SharkyEXE, например, так:
Код:
"%ProgramFiles%\7-Zip\7z.exe" x "D:\Install\UpdatePack-XPSP3-Rus\UpdatePack-XPSP3-Rus 13.6.15\UpdatePack-XPSP3-Rus-13.6.15.7z" "*" -x!"Addons" -x!"Files" -o"C:\1" |
Цитата:
|
Здравствуйте.Подскажите,пожалуйста код для батника что бы извлечь все файлы с папок в одну.Ситуация такая:скачал все обновления с сайта обновлений Microsoft и каждая обнова в отдельной папке(диск D\Windows Update\Update x64 Win 8 и в ней уже папки с обновами),а что бы их установить,например с помощью Windows 7 Update Pack Tool нужно их сложить в одну общую папку тем самым извлечь каждую со своей папки и бросить в общую(я сделал такой путь-D:\Проги\Windows Update\Windows 7 Update Pack Tool\Updates)Помогите мне пожалуйста,а то если я их по одной буду перекидывать в свободное время,у меня не одна неделя на это уйдет.
|
Что внутри папок? Покажите пару примеров.
|
в левой стороне я уже перекидывал в ручную...
|
Еще одна...
|
Вот
|
Radif Suharik, правильно ли я понимаю: Вам нужно перебрать все папки первого уровня, вложенные в папку «Update x64 Win8», найти в них все файлы *.exe и *.msu, затем скопировать эти файлы в папку «…\Windows 7 Update Pack Tool\Updates»?
|
Точно.
|
Radif Suharik, в таком случае, Вам не нужен скрипт.
|
Вложений: 1
Спасибо,можно попробовать...Но мне тут программку подкинули,она в принципе и решила мою проблеме,если кому будет интересно...
|
Radif Suharik, какой смысл в отдельной «программке» при наличии встроенных средств, позволяющих выполнить искомое в несколько нажатий клавиш, равно как и кучи сторонних файловых менеджеров, делающих сие ещё быстрее и проще?!
|
Ну не знаю...Это,наверно кому как удобно...И еще вопросик,может не по теме,но все же...Была на сайте темка-http://forum.oszone.net/thread-251886-2.html так вот там была программа для установки моих многострадальных обновлений-UpdatePack-13.6.16,но скачать ее не получается-помогите пожалуйста,подкинте.Если что то не не так-прошу простить,просто хотелось бы с ней попробовать,а найти не получается.
|
Вложений: 1
Вот ссылка.
|
|
Тоже интересен подобный вопрос. Нужно средствами самораспаковывающегося 7Z SFX Извлечь содержимое двух папок в одну общую. Например в архиве есть две папки "Common" и "x86", нужно слить содержимое их в одну не нарушая внутреннеей структуры. Как ни страннно, средствами коммандной строки оптимального решения не нашел. Есть только возможность распаковать все и скопирповать, а это очень затратно по времени, если содержимое папок большое по объёму.
|
mariolast, подготовьте пример такого архива небольшого объёма.
|
Вот небольшой архив. В реале полгига каждая папка
Нужно все из папки Common переместить в папку x64 https://mega.nz/#!FmA1BbQb!hjiR-DwhA...yvZKNV-AFP3dbQ |
Если нужно все из папки Common переместить в папку x64, то:
Код:
@Echo Off 1. Архиватор "%Arc%" 2. С ключами "%ArcKey%" 3. Обработает архивный файл "%ArcFile%" 4. Результат получим в папке "%BoxOut%" 5. Разархивированные указанные папки будут слиты в одной подпапке этой папки (здесь пример "x64") 6, 7... Из архива разархивируем только указанные папки, (здесь пример "Common" "x64", можно продолжить при желании перечисление папок) |
Ну...тут тоже двойная работа получается, делаю как раз для 7Z sfx, извлекать из него, потом еще раз разархивировать. Придется наверное таки через move делать
|
mariolast, напрямую ни через сам sfx, ни через 7z.exe, ни даже через standalone 7za.exe не выйдет — банально отсутствует необходимый функционал.
|
|
Цитата:
|
Цитата:
|
Суть сего в следующем.
Есть распакованные инсталляторы программы, 32 и 64 битные версии, для каждой свой. Лежат соотв. в папках x86 и x64. Размер каждой примерно 500Мб. С помощью sfx делается установка программы, определяется битность и после распаковки запускается инсталлятор либо из x64 либо из x86. Это все стандартно. Размер sfx инсталлятора составил 330Мб. Но еще задумка уменьшить размер sfx инсталлятора. Для это понаходил все одинаковые по содержимому, размеру и названию файлы, которые есть у обоих папках инсталлятора x86 и x64. И вынес их в отдельную папку Common. Получилось где то на 500Мб. Таким образом удалось уменьшить вес на 500Мб, так как удалил по 500Мб из x86 и x64 и создал одну папку Common на 500Мб. Таким образом в конечном sfx инсталляторе после создания получается где то 270Мб. Выигрыш в 60Мб и меньшее количество файлов в архиве, что положительно сказывается и на скорости распаковки. Теперь застопорился на том, как после запуска и распаковки инсталлятора в темповую папку обьединить папки скажем x86 и Common, потому как для запуска инсталлятора в папке ч86 ему надо дозаписать те 500Мб, которые перенес в папку Common. Для создания инсталляторов пользуюсь InnoSetup, там это без проблем, что куда распаковать, но он не умеет так ужимать, мало параметров. Думал что сам 7zip умеет определять одинаковые файлы и сжимать раз и записывать местоположение для распаковки. По разному игрался. Особо эффекта не дало, решил попробовать вот таким методом. |
mariolast, сначала переносим содержимое папки Common в папку разрядности системы, затем запуск исполнительного файла
Код:
RunProgram="%%P:hidcon:cmd /c \"move Common\\* %%P\\\"" |
sov44, затык в том, что если в папке х86 есть папка 1 и в папке Common есть папка 1, то при переносе получаем Отказано в доступе.
|
Пока смотрю в сторону AutoIT с его функцией DirMove ( "source dir", "dest dir" [, flag = 0 ] )
Там это делается без проблем за секунду. Но если что то можно придумать скриптом, буду рад за помощь, |
Время: 15:41. |
Время: 15:41.
© OSzone.net 2001-