2012-10-27 5 views
0

J'essaye de créer un fichier .bat simple qui va générer un fichier .html qui contient des liens d'images vers toutes les images du répertoire courant.Comment utiliser .bat pour créer une galerie d'images .html locale

Utilisation: C:> Galerie

sortie: gallery.html

Contenu du fichier:

<HTML><HEAD></HEAD><BODY> 
<IMG SRC="C:/path/path/path/image1.gif"> 
<IMG SRC="C:/path/path/path/randomepic.gif"> 
<IMG SRC="C:/path/path/path/asdfsadfasd.gif"> 
</BODY></HTML> 

Notez les fichiers d'image auront des noms imprévisibles, mais seront toujours .gif .

Ce que j'ai: (en gallery.bat)

@echo off 
    set file_start=<HTML><HEAD></HEAD><BODY> 
    set image_start=<IMG SRC=" 
    set image_dir=`cd` 
    set image_end="> 
    set file_end=</BODY></HTML> 
    set file_name=gallery.html 

    echo %file_start% > %file_name% 
    for %%image in (*.gif) do @echo %image_start%%image_dir%%%image%image_end% >> $file_name% 
    echo %file_end% >> %file_name% 

Mais cela ne fonctionne pas. Je ne peux pas obtenir le symbole inférieur à apparaître, car le fichier de commandes pense qu'il s'agit d'une redirection d'entrée. Si je cite les lignes avec le symbole <, alors les citations apparaissent dans les instructions d'écho.

Aussi, je ne peux pas obtenir la sortie de la commande cd pour sauvegarder à la variable% image_dir%

Enfin, la déclaration d'écho dans la boucle for n'imprime pas correctement. Cela pourrait être un symptôme des problèmes précédents. J'espère que ce sont des problèmes mineurs de syntaxe que je suis en train d'avoir. Est-ce que quelqu'un sait comment réparer ceci? Merci pour votre temps!

Patrick Q

+2

Il existe peut-être un moyen de le faire complètement dans le fichier de commandes, mais j'utiliserais un utilitaire externe qui peut effectuer une recherche + un remplacement dans un fichier. Ensuite, vous pouvez travailler avec un fichier HTML modèle, et remplacer les espaces réservés dans le fichier batch –

+0

Merci Pekka, mais c'est exagéré pour mon cas d'utilisation. –

Répondre

5

pour les variables doit être un seul caractère. Vous ne pouvez pas utiliser quelque chose comme %%image. Vous avez des problèmes avec < et > deux fois plus. Une fois lorsque vous définissez vos variables, et encore une fois lorsque vous faites écho à la variable développée. Ces caractères doivent être soit cités ou échappés avec ^.

Vous pouvez utiliser des guillemets pendant l'affectation sans inclure de guillemets dans la variable -
set "var=value". L'affectation de image_end est un peu difficile en raison de la citation intégrée.

Vous pouvez éviter le problème avec ECHO en échappant aux caractères problématiques dans votre affectation d'origine.

Vous ne pouvez pas utiliser CD pour obtenir le répertoire en cours. La syntaxe correcte est %CD%. Mais vous n'avez pas besoin de votre variable image_dir. Vous pouvez utiliser le modificateur ~f pour obtenir le chemin d'accès complet du nom de fichier. Tapez help for à partir d'une invite de commandes pour plus d'informations sur les modificateurs de variable FOR.

Il est plus efficace d'inclure toutes les commandes qui produisent une sortie entre parenthèses et de rediriger une seule fois vers votre fichier de sortie.

@echo off 
setlocal 
set "file_start=^<HTML^>^<HEAD^>^</HEAD^>^<BODY^>" 
set "image_start=^<IMG SRC="" 
set ^"image_end="^>" 
set "file_end=^</BODY^>^</HTML^>" 
set "file_name=gallery.html" 

>"%file_name%" (
    echo %file_start% 
    for %%I in (*.gif) do echo %image_start%%%~fI%image_end% 
    echo %file_end% 
) 

Une autre façon d'éviter les problèmes lors de l'ECHOing de caractères non-cotés est d'utiliser une extension retardée. Mais ! est valide dans les noms de fichiers, et l'expansion retardée corrompra l'expansion des variables FOR si elles contiennent le caractère !. L'expansion retardée doit donc être activée et désactivée dans la boucle.

@echo off 
setlocal enableDelayedExpansion 
set "file_start=<HTML><HEAD></HEAD><BODY>" 
set "image_start=<IMG SRC="" 
set ^"image_end=">" 
set "file_end=</BODY></HTML>" 
set "file_name=gallery.html" 

>"%file_name%" (
    echo !file_start! 
    setlocal disableDelayedExpansion 
    for %%I in (*.gif) do (
    set "image=%%~fI" 
    setlocal enableDelayedExpansion 
    echo !image_start!!image!!image_end! 
    endlocal 
) 
    endlocal 
    echo !file_end! 
) 
+0

Parfait! Merci d'expliquer toutes les erreurs! Il y a beaucoup de bonnes infos ici. Et le code que vous avez fourni fonctionnait comme un CHAMP! –

+0

J'ai une question de suivi. Y at-il un moyen de faire la liste des fichiers descendent dans des sous-répertoires? –

+0

@ user1706790 - Bien sûr, utilisez simplement 'for/r %% i ...'. Rien d'autre n'a besoin de changer. '%% ~ i' aura le chemin complet, donc le modificateur' ~ f' n'est plus nécessaire, bien qu'il ne fasse aucun mal. – dbenham

Questions connexes