Пакетное преобразование изображений из командной строки в Windows

2

У меня есть сценарий, основанный на учебнике GIMP :

  (define (batch-colorize pattern
                              hue
                              saturation
                              lightness)
  (let* ((filelist (cadr (file-glob pattern 1))))
    (while (not (null? filelist))
           (let* ((filename (car filelist))
                  (image (car (gimp-file-load RUN-NONINTERACTIVE
                                              filename filename)))
                  (drawable (car (gimp-image-get-active-layer image))))
             (gimp-colorize drawable
                            hue saturation lightness)
             (gimp-file-save RUN-NONINTERACTIVE
                             image drawable filename filename)
             (gimp-image-delete image))
           (set! filelist (cdr filelist)))))

Итак, теперь в папке с моими изображениями с cmd я запускаю:

SET gimpEXE = "C: \ Program Files \ GIMP 2 \ bin \ gimp-2.8.exe"

% gimpEXE% -i -b "(batch-colorize * .png 90 73 15)" -b "(gimp-quit 0)";

Но тогда GIMP говорит:

В пакетной команде произошла ошибка выполнения:

Ошибка: (: 1) eval: несвязанная переменная: * .png

И тогда я попробовал:

% gimpEXE% -i -b "(batch-colorize" "* .png" "90 73 15)" -b "(gimp-quit 0)";

Но тогда GIMP говорит:

Ошибка GIMP: не удалось открыть файл C: \ myfolder \ with \ png \ 90: такого файла или каталога нет

Ошибка GIMP: не удалось открыть файл C: \ myfolder \ with \ png \ 73: такого файла или каталога нет

Ошибка GIMP: не удалось открыть файл C: \ myfolder \ with \ png \ 15: такого файла или каталога нет

Ошибка GIMP: не удалось открыть файл C: \ myfolder \ with \ png \ 0: такого файла или каталога нет

Тогда я попробовал то, что было в оригинальном примере (ведь я предполагаю, что это для Linux):

% gimpEXE% -i -b '(batch-colorize "* .png" 90 73 15)' -b '(gimp-quit 0)'

Но тогда GIMP говорит все выше и:

Ошибка GIMP: не удалось открыть файл "C: \ myfolder \ with \ png * .png": невозможно открыть файл "C: \ myfolder \ with \ png * .png" для чтения: неверный аргумент

Nux
источник

Ответы:

3

Вы предполагаете, что ОС собирается расширить * .png для вас, но, поскольку она находится внутри строки в кавычках для аргумента командной строки, расширение не произойдет. Это должно решить проблему:

SET gimpEXE="C:\Program Files\GIMP 2\bin\gimp-2.8.exe"
for %%i in (*.png) do %gimpEXE% -i -b "(batch-colorize %%i 90 73 15)" -b "(gimp-quit 0)"

Обратите внимание, что %%iэто необходимо, только если это содержится в командном файле. Если вы запускаете команду непосредственно в командной строке, %iтребуется вместо этого.

Скотт МакКинни
источник
На самом деле я надеялся, что GIMP расширится * .png. В конце концов я использовал ту же (оригинальную) команду для разбора этих файлов, но в консоли GIMP. Но я думаю, что оба способа работают.
Nux