Я пытаюсь использовать 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 и экранирование %в именах файлов / папок в командной строке но не смог понять, как применить совет к моей проблеме.
обновление
добавление еще несколько примеров, чтобы ответить на вопросы в комментариях от @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