Це внутрішній пакувач-поштовий індекс від Total Commander:
Однак я хочу використовувати мій пакувач 7zip. Коли я вибираю 5 файлів, я отримую 5 окремих архівів .zip для кожного вибраного файлу. Як це зробити в 7zip?
Це внутрішній пакувач-поштовий індекс від Total Commander:
Однак я хочу використовувати мій пакувач 7zip. Коли я вибираю 5 файлів, я отримую 5 окремих архівів .zip для кожного вибраного файлу. Як це зробити в 7zip?
Відповіді:
Я не впевнений, що ви можете робити те, що пропонуєте, використовуючи графічний інтерфейс користувача, але ви можете, звичайно, з командного рядка:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Вам потрібно спочатку змінити каталог ( cd
команду) на F:\Downloads
каталог або будь-який каталог, який ви хочете виконати масовим стисненням. Крім того, досить просто замінити * .exe або будь-яке розширення, яке ви хочете відфільтрувати, щоб просто стиснути ці документи.
І секретне кільце декодера:
%i
- змінна, яка містить ім'я файлу для кожного кроку в циклі(*.*)
є критеріями вибору, це може бути * .exe або подібним7z.exe
- версія командного рядка 7-Zip%~ni
- це змінює змінну% i лише на ім'я файлу - без розширенняЯкщо ви хотіли просто додати папки для заданого каталогу, команда є трохи складнішою, оскільки за замовчуванням ЗА просто працює з файлами. Нам потрібно подати йому додаткову інформацію:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Це працює через кілька фрагментів того, що здається магічним:
/F
повідомляє FOR для повторення розширеного значення в ()usebackq
говорить ЗА, що я збираюся передати команду і використовувати висновок для ітераціїdelims=?
ДЛЯ, що я хочу розбити лексеми на ?
- незаконний символ у назвах файлів та каталогів. Я хочу лише один жетон./B
У DIR
для голого формату - тільки ім'я/A:D
У DIR
для обмеження результатів по атрибуту, то D для каталогівЯкщо ви хочете інкапсулювати це всередині пакетного файлу, єдине зміна, яке вам потрібно буде внести, це подвійне вимкнення змінної% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Мені подобається відповідь Гоюї. Однак якщо ви використовуєте Windows 7 (або встановлено Power Shell), а також використовуєте версію командного рядка 7-zip, 7za.exe, тоді ви можете запустити цю команду:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Ви також можете змінити "dir" на "dir * .exe", щоб вибрати лише виконувані файли.
Одна приємна річ про Power Shell - це те, що ви працюєте з об’єктами замість рядків. Таким чином, ви могли б отримати дійсно конкретні, якщо хочете. Наприклад:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Сюди входять лише файли, які:
РЕДАКТУВАННЯ Якщо ви хочете поштові файли замість 7-zip-файлів, використовуйте замість zip.exe InfoZip .
7z a -tzip archive.zip *.exe
Ви можете завантажити та встановити плагін 7zip для Total Commander з http://www.ghisler.com/plugins.htm Після того, як ви це зробите в правій частині вікна зі свого екрана екрана, з'явиться ще один вибір для стиснення 7zip. За допомогою цього варіанту ви можете виконати саме те, про що ви просите.
Я тільки працював над саме цією проблемою, і одне з виявлених нами проблем - це дублювання імені папки в архіві, тобто при стисненні папки під назвою "foo" створюється архів, що містить .\foo\fighters.txt
замість того, щоб містити лише одну fighters.txt
.
Відповідь, таким чином, полягає в тому, щоб зайти в оброблюваний каталог і відобразити архів у попередньому (кореневому) каталозі, а потім повернутися до цього каталогу для обробки наступної папки.
Також важливо, щоб 7ZIP ігнорував існуючі файли ZIP та CMD у кореневому каталозі, щоб запобігти їх закінченню в архіві, отже, -x!*.zip
і -x!*.cmd
аргументи виключення.
Цей сценарій також підтримуватиме рекурсивні структури папок.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Вищевказаний код слід скопіювати у пакетний файл, такий як "compress_dirs.cmd" і запустити як адміністратор із каталогу, що містить папки, які ви хочете стиснути.
Сподіваюся, це допомагає.
Якщо вам потрібно зберегти структуру папок і зберегти кожен файл у своїй структурі, спробуйте це:
Збережіть цю команду у файлі з розширенням .bat і помістіть її в папку, яку потрібно зібрати:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Примітка:
-sdel: видаляє вихідний файл (необов'язково, якщо ви хочете зберегти лише стислий файл)