Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
1

SFX-архив разрезать для последующей склейки и выполнения

30.04.2017, 23:33. Показов 2060. Ответов 15

Author24 — интернет-сервис помощи студентам
Есть EXE (SFX-архив) ~950 Мб
можно ли его как то разбить например на:
199 Мб + 199 Мб + 199 Мб + 199 Мб + 154Мб (архиватор FreeARC v0.76)
что бы потом через BAT все куски можно было склеить
(желательно не сохраняя склеенный файл) и выполнить


Возможно временно склеить во временную папку, а потом удалить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2017, 23:33
Ответы с готовыми решениями:

Макрос для переноса строк и их последующей склейки
Добрый день. Нужна помощь, первый раз столкнулся с очень большим объемом данных и совсем 0 в...

Скрыть SFX-архив
Здравствуйте. Мучает вопрос косательно SFX архива. Подскажите пожалуйста,как убрать возможность...

Inno setup sfx архив
Доброго времени суток! Каким образом можно создать экзешник аналогичный sfx архиву? Т.е который...

Как создать RAR SFX архив?
Привет всем! как создать винрарный exe-архив

15
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
30.04.2017, 23:37 2
А bat тут зачем? Создаете winrar'ом SFX, в настройках указываете разрезать на тома нужного размера. Один из томов будет выполняемым файлом.

Добавлено через 3 минуты
То есть вам нужно FreeArc'ом? И у него до сих пор отсутствует поддержка многотомных архивов?
Тогда вряд ли...
0
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
30.04.2017, 23:45  [ТС] 3
Цитата Сообщение от Garry Galler Посмотреть сообщение
winrar'ом SFX
Дело в том что сжимая этим архиватором EXE-файл получается ~2500 Мб
используя RAR 5.0 получается 1700 Мб и жрет 512 Мб оперативы при распаковке
(против 256 Мб с моим архивом)

Добавлено через 5 минут
Цитата Сообщение от Garry Galler Посмотреть сообщение
И у него до сих пор отсутствует поддержка многотомных архивов?
Есть какой то метод объединения через командную строку архивов ARC:
Кликните здесь для просмотра всего текста
Объединить архивы. Файлы, указанные в командной строке, должны быть архивами. Их содержимое будет добавлено к основному архиву. Если в основном архиве и одном из добавляемых есть файлы с одинаковыми именами, то в объединённом архиве останется только файл из добавляемого архива. «Исходный архив» может не существовать до начала выполнения команды, в этом случае произойдёт объединение уже существующих архивов с созданием нового. Примеры:
arc j new.arc old1.arc old2.arc
arc j new old[34]
arc j All_Together c:\* -r


Добавлено через 1 минуту
Garry Galler, у них уже сайт упал, не знаю по какой причине, но все необходимое я смог найти через вэб-архив, например: список команд
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
30.04.2017, 23:50 4
Для разрезания могут лишь посоветовать утилиту split. Но это юниксовая штука - и порт этой утилиты для windows я видел только в пакете GnuWin32. Она может разрезать любой бинарник на части нужных размеров. Склеивать можно попробовать виндовой copy /b 1.том+2.том+3.том+4.том result.exe. Но это будет на диске, а не в памяти.
Либо пробуйте склеивать тем же ARC, если он это умеет. Хотя, мне кажется, он тут не поможет.
0
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
30.04.2017, 23:57  [ТС] 5
Цитата Сообщение от Garry Galler Посмотреть сообщение
Либо пробуйте склеивать тем же ARC, если он это умеет.
Я так понимаю он умеет объединять архивы
а не склеивать части одного архива
А в винде никак? разме нет BAT скрипта?
считать N байтов, записать в файл
начать новое считывание
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 00:04 6
Цитата Сообщение от eXPonent Посмотреть сообщение
А в винде никак? разме нет BAT скрипта?
Именно батником - не думаю. Ничего похоже на split в windows нет. Возможно, vbs\jscript.
Powershell точно сможет и разрезать и склеить (не пробовал, но там в любом случае есть выход на .NET).
Но какими командами - эту уже в другую ветку вопрос.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
01.05.2017, 02:20 7
Цитата Сообщение от Garry Galler Посмотреть сообщение
Для разрезания могут лишь посоветовать утилиту split
я пользуюсь cutter
0
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
01.05.2017, 04:03  [ТС] 8
Вот что нашел http://okeygeek.ru/kak-razdelit-fajjl-na-chasti/
осталось узнать, отвечает за функцию сборки
и собрать во время запуска программы

Такая команда должна прокатить:
Windows Batch file
1
for %f in (*.bin) do type "%f" >> output.exe
Они равносильны?
Цитата Сообщение от Garry Galler Посмотреть сообщение
Склеивать можно попробовать виндовой
Windows Batch file
1
copy /b 1.bin+2.bin+3.bin+4.bin result.exe.
Но это будет на диске, а не в памяти.
Может стоит ещё указывать ключ:
Windows Batch file
1
/V - Проверка правильности копирования файлов.
Добавлено через 1 час 3 минуты
А в тотале можно применить разбивку?
1 Мб + 199 Мб + 199 Мб + 199 Мб + 199 Мб + 153Мб

(просто в начале идет SFX модуль, хотелось бы его сжать)
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 14:26 9
type читает файлы в текстовом режиме. Едва ли она подойдет для чтения бинарников и склеивания путем дозаписи.

Цитата Сообщение от eXPonent Посмотреть сообщение
А в тотале можно применить разбивку?
Можно. Гуевых утилит для разбивки предостаточно. File Splitter Joiner - самая простая и известная.
Но я полагал, что вы ищете сугубо встроенные средства.
Цитата Сообщение от alpap Посмотреть сообщение
я пользуюсь cutter
Мне не попадалась. Она консольная или гуевая? По названию гуглится слишком много похожих.
0
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
01.05.2017, 20:24  [ТС] 10
Цитата Сообщение от Garry Galler Посмотреть сообщение
type читает файлы в текстовом режиме. Едва ли она подойдет для чтения бинарников и склеивания путем дозаписи.
А поподробнее можно о методе чтения, простыми словами (не считывает спец символы)?

Цитата Сообщение от Garry Galler Посмотреть сообщение
File Splitter Joiner
Цитата Сообщение от eXPonent Посмотреть сообщение
можно применить разбивку?
1 Мб + 199 Мб + 199 Мб + 199 Мб + 199 Мб + 153Мб
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 20:49 11
SFX-архив разрезать для последующей склейки и выполнения


И что в данном случае не подходит?
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 20:52 12
Цитата Сообщение от eXPonent Посмотреть сообщение
А поподробнее можно о методе чтения
Вы попробуйте. Если получится - хорошо. Не получится - есть альтернатива в виде copy, которую юзают как естественную и надежную именно для таких юзкейсов.
0
99 / 52 / 27
Регистрация: 21.05.2012
Сообщений: 1,170
01.05.2017, 21:02  [ТС] 13
Цитата Сообщение от Garry Galler Посмотреть сообщение
И что в данном случае не подходит?
1 Мб + 199 Мб + 199 Мб + 199 Мб + 199 Мб + 153Мб
т.е. первый файл 1 Мб
следующий 199 Мб и последующие так же
последний сколько останется

Цитата Сообщение от eXPonent Посмотреть сообщение
(просто в начале идет SFX модуль, хотелось бы его сжать)
Добавлено через 5 минут
точнее SFX + текст в SFX окошке
(архиватор его не сжимает с UPX)
0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 22:51 14
Я уже упоминал про powershell, как встроенное (начиная с Vista) средство автоматизации и администрирования windows.
Если мне понадобится порезать файл на части - так как мне этого хочется - я напишу вот такой код и не буду ждать манны небесной в поиске нужных утилит:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$sizeFirstFile = 1mb
$sizeOtherFiles = 199mb
 
$file = "E:\\ISO\\VS2008\\VS2008ExpressWithSP1RUSx1504736.iso"
 
$bytes = new-object Byte[] $sizeFirstFile # выделяем память для порций
$source = new-object System.IO.FileStream $file, Open, Read
 
# считаем на сколько порций придется делить файл за вычетом 1 mb
$portions = [math]::Ceiling(($source.Length - $sizeFirstFile)/$sizeOtherFiles)
 
$bytesRead = $source.Read($bytes, 0, $bytes.Length)
$destfile = $file + ".chunk001" # суффикс файла в формате FileSplitter, чтобы склеить файлы им для проверки
$chunk = new-object System.IO.FileStream $destfile, Create, Write
$chunk.Write($bytes,0,$bytesRead) # запишем первую порцию размером в 1 mb
$chunk.close()
 
"Chunk: {0}|{1}|{2}" -f 1, $destfile,($bytesRead/1024/1024)
 
$bytes = new-object Byte[] $sizeOtherFiles
# прочитаем и запишем остальные порции
2..($portions + 1)|%{
    $destfile = $file + ".chunk00$_"
    $bytesRead = $source.Read($bytes, 0, $bytes.Length)
    "Chunk: {0}|{1}|{2}" -f $_, $destfile,($bytesRead/1024/1024)
    
    $chunk = new-object System.IO.FileStream $destfile, Create, Write
    $chunk.Write($bytes,0,$bytesRead)
    $chunk.close()
}
 
 
$source.close()
0
alpap
01.05.2017, 22:51
  #15

Не по теме:

Garry Galler,
именно эта

0
Эксперт Python
5418 / 3842 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
01.05.2017, 23:13 16
Изменил форматирование имени файла на заполнение нулями строки форматирования - так оно более правильно.
Кликните здесь для просмотра всего текста

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$sizeFirstFile = 1mb
$sizeOtherFiles = 199mb
 
$file = "E:\\ISO\\VS2008\\VS2008ExpressWithSP1RUSx1504736.iso"
$format = "{0}.chunk{1:d3}" # суффикс файла в формате FileSplitter, чтобы склеить файлы им для проверки
 
$bytes = new-object Byte[] $sizeFirstFile 
$source = new-object System.IO.FileStream $file, Open, Read
 
# считаем на сколько порций придется делить файл за вычетом 1 mb
$portions = [math]::Ceiling(($source.Length - $sizeFirstFile)/$sizeOtherFiles)
 
$bytesRead = $source.Read($bytes, 0, $bytes.Length)
$destfile = $format -f $file,1 # суффикс файла в формате FileSplitter, чтобы склеить файлы им для проверки
$chunk = new-object System.IO.FileStream $destfile, Create, Write
$chunk.Write($bytes,0,$bytesRead)
$chunk.close()
 
"Chunk: {0}|{1}|{2}" -f 1, $destfile,($bytesRead/1024/1024)
 
$bytes = new-object Byte[] $sizeOtherFiles
2..($portions + 1)|%{
    $destfile = $format -f $file,$_
    $bytesRead = $source.Read($bytes, 0, $bytes.Length)
    "Chunk: {0}|{1}|{2}" -f $_, $destfile,($bytesRead/1024/1024)
    
    $chunk = new-object System.IO.FileStream $destfile, Create, Write
    $chunk.Write($bytes,0,$bytesRead)
    $chunk.close()
}
 
 
$source.close()

Не по теме:

alpap,
Понял. Спасибо.

0
01.05.2017, 23:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2017, 23:13
Помогаю со студенческими работами здесь

Можно ли взломать архив sfx-rar, защищеный паролем?
Кто-нибудь может подсказать можно ли взломать архив sfx-rar ,защищеный паролем?Ответ пишите на...

Формирование списка файлов с последующей упаковкой в архив
Подскажите код для формирование списка файлов с последующей упаковкой в архив. Тип файлов не...

Как создать rar-sfx архив и указать в нем что файл config.txt нужно выполнить после распаковки
Помогите пожалуйста. как создать sfx архив и указать в нем что файл config.txt нужно выполнить...

Нужен макрос для склейки строк
Добрый Вечер!! Есть прайс 50к товаров нужно его обработать, а в макросах ни чего не понимаю....

Программа для склейки и резки видео
такая проблема я с диска скачал фильмы там они разбиты на шесть частей причем в одной части один...

301 htaccess для склейки нескольких зеркал
Столкнулся с проблемой Три доменных имени ведут на один хостинг, соответственно все имеют один...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru