2017-10-04 5 views
1

Je n'ai que des compétences très rudimentaires en programmation et en ligne de commande, donc je suis un peu perplexe par ce qui suit.Utiliser le montage ImageMagick avec une variable de sous-chaîne de nom de fichier

J'ai un répertoire avec des fichiers d'images comme celle-ci:

abc_B.jpg 
abc_G.jpg 
abc_R.jpg 
abc_RGB.jpg 
defg_B.jpg 
defg_G.jpg 
defg_R.jpg 
defg_RGB.jpg 
etc... 

Je veux assembler des ensembles des quatre R, G, B et images RVB à l'aide ImageMagick. Pour un ensemble individuel d'images cela est assez simple:

montage *_B.jpg *_G.jpg *_R.jpg *_RGB.jpg [some arguments] montage.jpg 

En fait, j'ai copie des jeux de quatre images dans un répertoire temporaire et exécutez la commande ci-dessus. Mais ce n'est bien sûr pas très efficace ou pratique avec de plus grands ensembles d'images. Mais pour l'exécuter sur l'ensemble du répertoire il doit y avoir un moyen de prendre la partie 'abc', 'defg', etc. du nom de fichier et de le placer dans une variable (appelons-la% v) et d'exécuter quelque chose comme ça :

montage %v_B.jpg %v_G.jpg %v_R.jpg %v_RGB.jpg [some arguments] %v_montage.jpg 

Maintenant, pour itérer sur des fichiers dans un répertoire, il existe la commande FOR. Mais je n'ai aucune idée de comment gérer cela avec des groupes de quatre fichiers et comment extraire et utiliser une sous-chaîne de nom de fichier pour que cela fonctionne.

Une aide précieuse serait grandement appréciée.

+0

Etes-vous sûr qu'il s'agit de DOS et non de Windows cmd? – Alejandro

+0

Oui, pour clarifier, je l'exécute sur Windows 7. – pipet

+0

Ok, j'ai pris la liberté d'éditer les balises dans la question pour refléter cela alors. – Alejandro

Répondre

0

Il pourrait ressembler à ceci - le stocker sous forme GO.BAT:

@ECHO OFF 
FOR /F "delims=_" %%G IN ('DIR /B *_R.JPG') DO (
    ECHO MONTAGE %%G_R.JPG %%G_G.JPG %%G_B.JPG %%G_RGB.JPG ... montage_%%G.JPG 
) 

Exemple de sortie

MONTAGE abc_R.JPG abc_G.JPG abc_B.JPG abc_RGB.JPG ... montage_abc.JPG 
MONTAGE defg_R.JPG defg_G.JPG defg_B.JPG defg_RGB.JPG ... montage_defg.JPG 

Vous supprimerait le ECHO si vous aimez ce qu'il fait, parce qu'à le moment où il ne fait rien sauf vous dire ce qu'il ferait!

J'utilise DIR /B dans la commande pour éviter d'obtenir des en-têtes, et je liste seulement les *_R.JPG afin que chaque nom de fichier ne se produise qu'une seule fois - pas quatre fois. Il existe une référence pratique here.

+0

Merci beaucoup! Je n'aurais jamais pensé à cette partie DIR/B pour obtenir une liste de noms de fichiers uniques. – pipet