Пакет 7zip SFX для папки SendTo

7z a -mx9 -sfx %1.exe %1

Это то, что у меня есть до пакетного файла, который, если я перетащу файл или папку в пакетный файл, я получаю 7zip SFX на Ultra Compression под тем же именем, что и исходный файл. но это работает, только если файл находится в той же папке, что и командный файл.

Что я пытаюсь достичь, так это поместить этот командный файл в папку sendto, чтобы я мог преобразовать любой файл в любом месте в сильно сжатый exe, который появляется в папке исходного каталога.

Любая помощь будет принята с благодарностью, я уверен, что это просто, но я понятия не имею.

Редактировать 29 мая в 16:50

[HKEY_CLASSES_ROOT * \ shell \ Сжать в Exe]

[HKEY_CLASSES_ROOT * \ shell \ Compress To Exe \ command] @ = "\" c: \ Program Files \ 7-Zip \ 7z \ "u -mx9 -sfx -r -t7z \"% 1.exe \ "\"% 1 \ ""

добавьте это в реестр или файл .reg, чтобы создать кнопку контекстного меню, которая является родительской для sendto.


person Chumbawamba    schedule 28.05.2013    source источник


Ответы (1)


Я использую следующий командный файл для отправки файла или папки по ярлыку Send-To, который создает самораспаковывающийся файл 7z в том же месте, что и исходный файл / папка:

@echo off
cd /d %1
if %errorlevel%==1 (goto file) else (goto dir)

:dir
cd..
"c:\Program Files\7-Zip\7z" u -mx9 -sfx -r -t7z "%~n1.exe" "%~f1"
goto :EOF

:file
cd /d "%~dp1"
if exist "%~n1.exe" (
  "c:\Program Files\7-Zip\7z" u -mx9 -sfx -t7z "%~n1_zipped.exe" "%~f1"
) else (
  "c:\Program Files\7-Zip\7z" u -mx9 -sfx -t7z "%~n1.exe" "%~f1"
)
goto :EOF

Мои параметры немного отличаются от ваших, но вы можете настроить их по своему усмотрению.

29 мая - Редактировать

Добавлен код if exist, так что если вы отправите .exe в пакетный файл, он все равно будет создавать самораспаковывающийся .exe, но с _zipped в имени файла.

person James L.    schedule 29.05.2013
comment
Спасибо, что отлично работает, все еще пытаюсь понять, что все это делает, лол - person Chumbawamba; 29.05.2013
comment
Единственная проблема, которую я могу найти, это то, что она не работает с exe-файлами. Есть ли способ это изменить. - person Chumbawamba; 29.05.2013
comment
Единственный способ заархивировать EXE - это изменить имя файла. Я отправлю правку в код. - person James L.; 29.05.2013
comment
Люблю это спасибо. также создал пункт контекстного меню просто для удовольствия. добавлю это в свой пост - person Chumbawamba; 29.05.2013
comment
Предложите перенаправить stderr на nul при проверке каталога (строка 2), чтобы избежать отображения ошибки. cd /d %1 2> nul - person Nigel Touch; 04.07.2013