[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Иногда возникает необходимость сделать полностью автономный батник, не требующий внешних файлов.
Ресурсы можно встроить в сам батник используя Base64 кодирование, в приложенном файле демонстрируется эта возможность.
Работоспособен на winxp-win10.
Вложение

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 842
  • Репутация:40

    [+] [-]
nikzzzz, Base64 не самый удачный вариант - распирает. Вот если б сжать немного.. может через expand.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
Так Base64 не жмет, а наоборот увеличивает в 4/3 раза размер файла, в принципе, можно вообще бинарник к батнику приклеить, но проблемы с редактированием возникнут.
Можно написать Base128, но это не большой выигрыш, 8/7 вместо 4/3 , да и декодировать сложнее.
Пожать можно, но тогда придется создавать временные файлы, а этого делать не хочется.
А исполняемые, можно и UPX пожать.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 842
  • Репутация:40

    [+] [-]
nikzzzz, Пишу, чтоб ты меня поправил, если я неправ.
- Первый вариант. Допустим есть файл, который можно сжать, типа картинки. Сжимаем через expand, кодируем в Base64. В батнике раскодируем и разжимаем. По идее должны что-то в размере выиграть.
- Второй вариант. Допустим есть файл, который нельзя сжать, типа exe-шник. Тут видимо никак. У меня 471 kb исходный, получился 630 Kb CMD. Хотя по идее CMD то сжать можно, но получим опять же exe-шник, что противоречит задаче.
Наверняка можно ещё как-то сделать, но у меня фантазии не хватает. Что-то наподобии как-то сжать Base64..
Кстати как TBS то сжимают, там выиграш в 3 раза, впрочем там текст, видимо там проще..

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 842
  • Репутация:40

    [+] [-]
Работоспособен на winxp-win10.
Это, если скрипты разрешены, есть всякие "оптимизаторы", которые их отключают. Поэтому желательна или проверка реестра или тупо включать и не проверять.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
dialmak
Сжатый файл надо распаковывать, штатные средства - cab и zip, но при этом придется сначала распаковать файл из base64, а потом уже распаковать его из zip или cab.
К сожалению, встроенные архиваторы не поддерживают распаковку из потока, без временного файла не обойдешься.
По поводу картинок - форматы jpg и png сами являются архивами, паковать их не только нет смысла, но и вредно, размер при паковке растет.
Exe'шники неплохо пакуются Upx, их тоже паковать нет смысла.
Вот текстовые файлы действительно хорошо пакуются, но они обычно не очень большого размера, то-же паковка не даст большого выигрыша.
Можно, конечно написать свой архиватор, но распаковщик сам будет достаточно большого размера, да и изобретать велосипед лень.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
57279или тупо включать
Если человек постится, зачем его насильно кормить? al
А в случае запрета скриптов окошко об этом и так при запуске вылезет, можно и не проверять. ae

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3832
  • Репутация:127

    [+] [-]
57279Это, если скрипты разрешены
Добавлю 5 коп: и если вообще есть поддержка скриптов. Потому что, например, в WinPE её (поддержки скриптов) может не быть.

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Ander_73
57282например, в WinPE её (поддержки скриптов) может не быть.
В WinPE может много чего не работать, софт предварительно проверяется сборщиком, а он уже решает, что делать, либо добавить поддержку скриптов, либо поправить батник.

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3832
  • Репутация:127

    [+] [-]
57283софт предварительно проверяется сборщиком
Это всё понятно. Я к тому, что область применения такого решения ограничена "живой" системой, либо требует специальной проверки на запускаемость в конкретной WinPE.
---
... либо требует "допиливания" самой WinPE ag

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
Ander_73
К сожалению, батники практически не могут работать с бинарными данными, в штатных утилитах тоже особого выбора нет.
А под WinPe - там вообще своя специфика, можно и немного повозиться, я, например всегда поддерживаю WSH.
Да и вообще, эту тему затеял MBTY, я просто решил тряхнуть стариной, не помню, когда уж последний раз wsh скрипты писал. al

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 10 месяцев
  • Сообщений: 3832
  • Репутация:127

    [+] [-]
57285я, например всегда поддерживаю WSH
Я заметил bs
По счастью, сборки Xemom1 тоже требуют лишь незначительного "допиливания", буквально одну-две длл-ки вернуть на место - и порядок.
57285эту тему затеял MBTY
Да, отжог по полной. Сперва меня упрекнул в якобы использовании дополнительного софта, а потом сам безо всякой паузы выкатил отдельную утилиту. af

[Цитировать]

    MBTY
  • 1499
  • Стаж: 9 лет 2 месяца
  • Сообщений: 86
  • Репутация:9

    [+] [-]
Ander_73, я до сих пор работал над всем этим, но попутно рождаются костыли, я делюсь ими, потому что в личку спрашивают и просят. Ну ок, не буду чо.
nikzzzz, колдун вы. Всегда считал вас темным магом, ей богу. Осталось затестить как эта дичь поведет себя на нескольких WinPE и я спокоен, хотя изначально именно использования на полноценных ОСях и нужно было. Спасибо большое.


Последний раз редактировалось: MBTY (2018-09-08 13:47), всего редактировалось 1 раз

[Цитировать]

    nikzzzz
  • 215
  • Стаж: 9 лет
  • Сообщений: 3114
  • Репутация:127

    [+] [-]
MBTY
57289Осталось затестить как эта дичь поведет себя на нескольких WinPE
Плохо себя поведет, даже если есть поддержка wsh, она обычно не полная, не все объекты поддерживаются, но там есть другие варианты, например Autoit есть практически во всех сборках, просто надо писать отдельные батники - под WinPe и обычную систему.

[Цитировать]

    dialmak
  • 2607
  • Стаж: 8 лет 10 месяцев
  • Сообщений: 842
  • Репутация:40

    [+] [-]
nikzzzz, Немного полумав понял, что можно проще без Base64. Просто склеить через
copy /y /a "source.bat" + /b program.exe /b combined.bat
В батнике можно "расклеить" через findstr.
Проверил - 471 kb исходный, получился 471 kb с копейками, с Base64 630 kb
И не нужен cscript...
Короче ненужная утиль получилась.

Страница 1 из 2


Показать сообщения:    

Текущее время: 03-Дек 20:32

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы