Назад | Перейти на главную страницу

Вопрос командной строки Zip

У меня есть машина Windows со структурой каталогов, которая содержит файлы с определенным расширением. Мне нужен сценарий, который добавит заархивированный файл для каждого файла с этим расширением. Есть ли способ сделать это с помощью 7 Zip (7za.exe)? Если нет, есть ли другие варианты?

ПЕРЕД \ dir1 \ dir2 \ file.ext

ПОСЛЕ \ dir1 \ dir2 \ file.ext file.zip

Я бы предложил использовать PowerShell.

Get-ChildItem -Include *.ext -Recurse
    | %{ &zipcommand a $_.FullName ($_.FullName+'.zip') }

Предполагается, что zipcommand - это ваш инструмент для архивирования в командной строке и что он принимает 3 аргумента: «a» для архива, файл для архивирования и имя архива.

Возможно, это не то, что вы ищете, но я бы использовал Cygwin и утилиту поиска * nix:

find dir1 -name "*.ext" | while read i; do zip "$i.zip" "$i"; done

«find» начинается с «dir1» и повторяется, сопоставляя все с именем формы «* .ext». Он выводит список совпадений, который передается по конвейеру в «while read i», который считывает каждую строку (соответствующий путь) в переменную «i». Для каждого другого значения i выполняется команда «zip», сжимающая файл в zip-архив с тем же именем (и путем), но с добавленным «.zip».

Обратите внимание, что это не приведет к удалению исходного файла. Для этого я мог бы добавить "rm $ i" после команды zip, но лучше создать архивы за один шаг, а затем использовать:

find dir1 -name "*.ext" | while read i; rm "$i"; done

найти и удалить оригиналы. Еще одна хорошая вещь, которую нужно сделать для проверки вашей строки перед ее запуском, - это повторить команду, а не выполнять ее.

find dir1 -name "*.ext" | while read i; do echo zip "$i.zip" "$i"; echo rm "$i"; done

Это покажет вам каждую из команд zip и rm, которые он будет выполнять, если вы удалите эхо, чтобы вы могли убедиться, что он делает правильные вещи. Затем удалите эхо, чтобы это сделать.

Если есть хороший способ сделать это с помощью обычных утилит Windows, я об этом не знаю.

Вы можете использовать VBScript вместе с достойной программой zip из командной строки. Google для VBScript + FileSystemObject + Recursive, чтобы найти подходящий сценарий vbscript. Вы можете изменить код для запуска инструмента zip из командной строки.

Вот пример в Ch, который имеет встроенные возможности архивирования:

cd "c:\dir1\dir2"
pwd
string_t file, dir_listing=`ls ./`;
string_t zipfile;
foreach(file; dir_listing) {
    zipfile = strtok(file, "."); 
    zip $zipfile $file
    }
ls -l

Я написал его в системе Windows, и он должен работать без проблем. По крайней мере, здесь. Если вы хотите попробовать, вы можете скачать стандартную версию Ch, которая распространяется бесплатно. Просто вставьте код в текстовый файл и назовите его без разницы.ch. После того, как вы установили Ch, вы можете запустить его из командной строки.

Изменить: сценарий выше будет заархивирован все файлы в указанном каталоге. Чтобы отфильтровать файлы по расширению, измените

string_t file, dir_listing=`ls ./`;

к

string_t file, dir_listing=`ls *.ext`;

Вы просто меняете аргументы команды ls для вашего типа файла.