mogrify - как вы проходите через подпапки в Windows

Я думал, что был простой переключатель в mogrify Параметры команды, которые сообщают об этом, также проходят через подпапки. Я не нашел ни одного. В Linux"find"Команда, кажется, добивается цели, как вы делаете это в Windows?

magick mogrify -resample 72 -resize 700x700 -format png -path "C:\ImageMagick-7.0.8-Q16\dest" *.*

работает, но мне нужно, чтобы он проходил через подпапки. Какой самый простой способ сделать это?

В идеале я ищу структуру каталогов источника, которая будет сохранена в месте назначения, но только с обработанными изображениями.

3 ответа

Решение

ImageMagick Рекурсивно Mogrify файлы - Windows

Вы можете использовать цикл FOR /R для итерации файлов, начиная с корневого каталога, в котором находятся файлы, и затем запускать их над командами соответственно, как показано в примере ниже для каждого файла.

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


Пример команды

Примечание: обязательно замените C:\Source\Folder\Root чтобы быть точной папкой, в которой находятся файлы или подпапки файлов, которые он будет использовать для выполнения командных операций с этими файлами.

for /r "C:\Source\Folder\Root" %a in (*.*) do mogrify -resample 72 -resize 700x700 -format png "%~a"

Пример команды (с удалением)

for /r "C:\Source\Folder\Root" %a in (*.*) do mogrify -resample 72 -resize 700x700 -format png "%~a" && IF NOT [%~Xa]==[.png] DEL /Q /F "%~a"

Дополнительные ресурсы

  • FOR /R
  • Пакетные замены (ЗА /?)

    Кроме того, была улучшена замена ссылок на переменные FOR. Теперь вы можете использовать следующий необязательный синтаксис:

    %~xI        - expands %I to a file extension only
    
  • mogrify

  • Del
dir -recurse -path "D:\DOWNLOAD" -include *.jpg | %{magick $_.FullName -quality 95% -interlace Plane -sampling-factor 4:2:0 -strip "$($_.Directory)\$($_.Basename).webp"}

Решение Powershell, измените коэффициент по своему усмотрению.

Довольно сложно ввести все эти факторы, для PowerShell вы можете настроить функцию, которая "форматирует" вашу команду:

    function magickrec($tpath, $quality,$sformat ,$tformat)
{
    dir -recurse -path $tpath -include *.$sformat | %{magick $_.FullName -quality $quality -interlace Plane -sampling-factor 4:2:0 -strip "$($_.Directory)\$($_.Basename).$tformat"}
}

Сохраните его в папке PowerShell по умолчанию (eg.D:\DOCUMENT\WindowsPowerShell) в виде Microsoft.PowerShell_profile.ps1и установите "ExecutionPolicy" как "RemoteSign". (Для этого вам нужно запустить ps как adminstrater, затем set-ExecutionPolicy RemoteSigned)

Набрав magickrec "yourpath" 76% jpg heicвы можете рекурсивно преобразовать все изображения jpg в этой папке в heic. Как и раньше, вы меняете коэффициент по своему желанию.

Существующий ответ Windows предоставляет только один файл за раз., что, вероятно, замедляет его, поскольку он не может использовать многопоточность с OpenMP таким же образом.

Вот мой ответ, отформатированный для пакетного сценария. Он уничтожает все соответствующие файлы в текущем каталоге, а затем и во всех подкаталогах (рекурсивно). Сохраните пакетный сценарий в нужном каталоге, а затем дважды щелкните его, чтобы выполнить.

      @echo off
echo MOGRIFY CURRENT DIRECTORY:
@echo on
magick mogrify -transparent white -trim +repage *.png
@echo off
echo:
echo MOGRIFY SUBDIRECTORIES:
@echo on
FOR /D /R %%A IN (*) DO magick mogrify -transparent white -trim +repage "%%A\*.png"
@echo off
echo:
echo SCRIPT COMPLETE
pause
Другие вопросы по тегам