У меня есть папки с фотографиями в папках категорий

например

  • каникулы
    • Испания
    • Франция
    • Италия
  • семья
    • сын
    • daugher
  • рождество
    • 2010
    • 2011

... кроме гораздо дольше ... там около 100 папок.

Мне нужно сжать каждую подпапку (т.е. Испания, Франция Италия, сын, дочь и т.д.) По отдельности; так, например, для папки категории "праздники" я получу:

  • каникулы
    • Испания
    • spain.zip
    • Франция
    • france.zip
    • Италия
    • italy.zip

... и так далее. (или используя rar-файлы)

Я хочу избежать этого вручную, если это возможно, и я думаю, что это возможно из командной строки, используя WinRar (хотя я мог бы использовать что-то еще, если бы это было лучше). Может ли кто-нибудь дать мне (и кратко объяснить мне) код, который я буду использовать, и как его использовать. Я немного знаю о командной строке, но у меня довольно ограниченный опыт.

Я использую Windows 7

5 ответов5

1

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

Пакетный режим позволяет вам перебирать каталоги, используя цикл for следующим образом:

for /d %%X in (directorySet) do ( command )

/d необходимо указать, что вы будете проходить по каталогам
%% X - каталог в списке
команда что запустить как 'эхо "привет"

Источник: http://www.robvanderwoude.com/for.php

Это все, что я действительно знаю, что может вам помочь, то, что вы используете вместо команды , очень зависит от программы, которую вы используете.

Это было бы проще в Powershell, так как он имеет более похожую на bash нотацию и гораздо более гибок, но использование пакетного режима вполне подходит.

Извините, это вся помощь, которую я могу оказать, я очень мало знаю о партии ...

1

У меня нет системы Windows, чтобы подготовить вашу команду,
Но вот приблизительный список вещей,

  • вы бы использовали команду dir в цикле for (или, может быть, вам нужна более свежая страница справочника)
  • ограничить dir листинг на глубину = 1 каталоги
    • /A:D Folder Переключатель папки (?)
    • какой-то способ не использовать рекурсию или использовать глубину == 1 (сейчас я забыл о пакетных файлах Windows)
  • Проверьте 7z тоже
  • Если вы часто в Windows, сценарии проверьте PowerShell
1

В DOS перейдите в родительскую папку с более чем 100 папками, а затем выполните одну команду "for", например:

for %v in (*.*) do pkzip %v.zip %v

Замените pkzip на ваш инструмент командной строки zip/archive. 2-й и 3-й «% v» расширяются до имен папок.

1

Проверьте мой ответ на аналогичный вопрос SU под названием «Как создать отдельные файлы 7z из каждого выбранного каталога с помощью командной строки 7zip?" Его можно легко адаптировать для использования другого инструмента командной строки zip/archive, просто измените часть после DO в операторе.

Я лично предпочитаю 7-Zip, а не WinRAR и пару других утилит сжатия, которые я пробовал. Это мощный, быстрый и бесплатный. Обратите внимание, что маловероятно, что ваши файлы изображений смогут быть сжаты в значительной степени, поскольку по характеру их формата они обычно уже сжаты с помощью сложных алгоритмов, ориентированных на изображения, которые, как правило, лучше, чем любой общий, используемый в утилите сжатия - хотя Заявления о несвободной программе WinZip могут еще больше сократить файлы изображений JPEG на 20-25%.

0

Я подумал, что было бы лучше ответить на мой собственный вопрос и согласиться с тем, что, несмотря на полезные ответы (отдавая голос всем вместо выбора ответа) ... чтобы будущие посетители получили краткий ответ. Это потому, что в итоге я получил свой результат от комбинации из четырех ответов, поэтому здесь было проверенное решение, с которым я в итоге пришел.

Я изменил на 7zip (загрузив версию командной строки и поместив ее в свою папку пользователя), потому что она, кажется, имеет лучшую документацию по работе с командной строкой, чем Winrar.

Затем я создал командный файл, который я запускал из папки, подпапки которой я хотел сжать; и вставьте в него следующую команду, которую я получил из других ответов:

for /d %%i in (*.*) do "c:\users\user\7za" a -tzip "c:\path\to\output\folder\%%i.zip" "%%i"

(Мое имя пользователя - «пользователь», поэтому оно будет изменено в соответствии с именем пользователя Windows 7).

Я проверил команду, удалив различные аспекты, например, /d и -tzip, и не нашел ее работоспособной, если она не была реализована.

Я также обнаружил, что это хороший ресурс http://www.dotnetperls.com/7-zip-examples

NB. Меня не интересовала глубина папки, и в моем случае все подпапки находятся только на один уровень ниже папок верхнего уровня. Также эти папки содержат только файлы, но не больше папок. Я сомневаюсь, что приведенный выше код будет работать для папок, содержащихся в папках, но я уверен, что он может быть легко адаптирован.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .