Я пытаюсь использовать ImageMagick из командной строки в Windows 7, чтобы конвертировать много изображений одновременно. Я хотел бы использовать опцию -set, но получаю неожиданные результаты. Короткий пример некоторых странностей, которые я вижу, таков:
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world "%[filename:foo]_%[filename:bar].png"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.125u 0:00.135
Обратите внимание, что символ подчеркивания загадочным образом удаляется из выходного имени файла. Я могу использовать символ вставки (^), чтобы избежать второго знака процента, чтобы сохранить подчеркивание:
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world "%[filename:foo]_^%[filename:bar].png"
example.jpg=>hello_world.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.125u 0:00.126
Что тут происходит? Почему вставка каретки приводит к сохранению подчеркивания? Является ли каретка (^) даже правильным побегом? Это происходит из-за расширения переменной среды командной оболочки или странность возникает из-за того, как ImageMagick обрабатывает экранирование процентов? В любом случае, существуют ли общие принципы использования символов процента в аргументах командной строки, которым можно следовать, чтобы вызвать предсказуемое поведение?
То, что я на самом деле хочу сделать, - это версия вышеупомянутой команды с множеством установленных свойств, которая может обрабатывать самые имена файлов со специальными символами, такими как пробелы и символы процента, но кажется глупым пытаться сделать это, если я не могу понять этот гораздо более простой пример , В конечном итоге мне нужно будет выполнить команду из программы .NET.
Я просмотрел http://www.robvanderwoude.com/escapechars.php и Escaping %'s в file-/folder-names в командной строке, но не смог понять, как применить совет к моей проблеме.
Обновить
Добавим еще несколько примеров для ответов на вопросы в комментариях @dbenham и @Synetech.
Перемещение подчеркивания от перед вторым символом процента, как в последнем примере выше, до подчеркивания приводит к созданию файла с именем hello^world.png
:
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world "%[filename:foo]^_%[filename:bar].png"
example.jpg=>hello^world.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.141u 0:00.132
Выход из каретки в окружающих кавычках всегда приводит к helloworld.png
, независимо от того, где размещены каретки внутри:
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world ^"^%[filename:foo]_^%[filename:bar].png^"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.109u 0:00.115
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world ^"%[filename:foo]_^%[filename:bar].png^"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.141u 0:00.143
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world ^"^%[filename:foo]_%[filename:bar].png^"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.125u 0:00.126
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world ^"%[filename:foo]_%[filename:bar].png^"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.125u 0:00.131
C:\>convert example.jpg -verbose -set filename:foo hello -set filename:bar world ^"%[filename:foo]^_%[filename:bar].png^"
example.jpg=>helloworld.png JPEG 352x264 352x264+0+0 8-bit DirectClass 131KB 0.125u 0:00.111