Скажем, есть исполняемый файл target.exe, есть ли способ сжать этот файл в target.zip без указания имени архива (выходного имени) с помощью командной строки 7zip?
2 ответа
Я не думаю, что это возможно только с помощью утилиты командной строки. Команда ожидает архивное имя файла (добавить или создать) и список файлов.
Если вы попытаетесь без указания имени архива, вы получите System Error: Incorrect Function
поскольку первый ожидаемый аргумент - это имя архива. Например, если вы укажете исполняемый файл, он скажет, что тип архива не поддерживается, так как попытается создать архив .exe
.
Однако: 7-zip - это программное обеспечение с открытым исходным кодом. Вы можете изменить , как команда работает , чтобы ожидать различные аргументы, или даже сделать новый выключатель свой собственный!
Вот скрипт Perl, который я быстро скомбинировал, который должен делать то, что вы хотите:
#!C:/Perl/bin/perl.exe
use warnings;
use strict;
exit unless @ARGV;
my $path = "C:\\Program Files\\7-Zip\\7z.exe"; # modify this accordingly
my $infile = (split /\./,$ARGV[0])[0];
system("\"$path\" a $infile @ARGV");
Сценарий примет имя первого аргумента (перед .
В имени файла) и будет использовать его в качестве основы для имени архива. Я предположил, что вы используете Windows по ссылке .exe
, если нет, измените строку shebang.
Разместите скрипт где-нибудь в вашей переменной PATH и используйте его так:
7z.pl target.exe otherfile someotherfile
Он создаст архив с именем target.7z
с этими 3 файлами.
То, что вы пытаетесь сделать, это функция gzip. 7zip поддерживает gzip как один из методов распаковки, хотя и не поддерживает функцию zip. Смотрите информацию здесь http://www.gzip.org/.