J'essaie d'utiliser ImageMagick à partir de la ligne de commande sous Windows 7 pour convertir plusieurs images à la fois. J'aimerais utiliser l'interface de l'option -set, mais j'obtiens des résultats inattendus. Voici un petit exemple des bizarreries que j'observe :
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
Remarquez que le caractère de soulignement est mystérieusement supprimé du nom du fichier de sortie. Je peux utiliser un caret (^) pour échapper au deuxième signe de pourcentage afin de conserver le trait de soulignement :
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
Que se passe-t-il ici ? Pourquoi l'insertion de la virgule entraîne-t-elle la conservation du trait de soulignement ? Le caret (^) est-il même l'escaper correct à essayer ? Ce comportement est-il dû à l'expansion de la variable d'environnement Shell ou l'étrangeté résulte-t-elle de la façon dont ImageMagick gère les échappements en pourcentage ? Quoi qu'il en soit, existe-t-il des principes généraux concernant l'utilisation des symboles de pourcentage dans les lignes de commande qui peuvent être suivis pour obtenir un comportement prévisible ?
En fait, je voudrais faire une version de la commande ci-dessus avec beaucoup plus de propriétés définies, qui puisse gérer des noms de fichiers avec des caractères spéciaux tels que des espaces et des symboles de pourcentage, mais il semble idiot d'essayer cela si je ne peux pas comprendre cet exemple beaucoup plus simple. En fin de compte, j'aurai besoin d'exécuter la commande à partir d'un programme .NET.
J'ai examiné http://www.robvanderwoude.com/escapechars.php y Échapper aux % dans les noms de fichiers/dossiers à la ligne de commande mais je n'arrivais pas à comprendre comment appliquer les conseils à mon problème.
アップデート
Ajout de quelques exemples supplémentaires pour répondre aux questions posées dans les commentaires de @dbenham et @Synetech.
En déplaçant le trait de soulignement d'avant le deuxième symbole de pourcentage, comme dans le dernier exemple ci-dessus, à avant le trait de soulignement, on obtient un fichier nommé 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
Le fait de ne pas mettre les guillemets entre parenthèses aboutit toujours au résultat suivant helloworld.png
indépendamment de l'endroit où les carets sont placés à l'intérieur :
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