2012-10-27 41 views
0

我試圖創建一個簡單的.bat文件,將生成包含圖像鏈接到當前目錄中的所有圖像的.html文件。如何使用.BAT創建本地html的圖片庫

用法: C:>畫廊

輸出: gallery.html

文件內容:

<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> 

注的圖像文件會產生不可預料的名稱,但將永遠爲.gif 。

我有什麼(在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% 

但它不工作。我無法得到出現的小於符號,因爲批處理文件認爲它是輸入重定向。如果我用<符號引用這些行,那麼引號出現在echo語句中。

而且,我不能讓cd命令的輸出保存到變量%image_dir%

最後,在for循環中的echo語句不打印出正確。這可能是以前問題的一個症狀。

我希望它只是我有一些小的語法問題。有誰知道如何解決這一問題?謝謝你的時間!

Patrick Q

+2

可能有一種方法可以在批處理文件中完全做到這一點,但我會使用外部實用程序,它可以在文件中執行搜索+替換。然後,您可以使用模板HTML文件,並在批處理文件中替換佔位符 –

+0

感謝Pekka,但這對我的使用案例來說太過分了。 –

回答

5

FOR變量必須是單個字符。你不能使用類似%%image的東西。

您有<>兩次以上的問題。一旦你定義你的變量,並再次回顯擴展變量時。這些字符必須用^引用或轉義。

您可以分配過程中使用引號,而不包括在可變報價 -
set "var=value"。由於嵌入式報價,image_end的分配有點棘手。

你可以在你的初始分配逃避問題的字符避免與ECHO的問題。

不能使用CD來獲取當前目錄。正確的語法是%CD%。但你不需要你的image_dir變量。您可以使用~f修飾符來獲取文件名的完整路徑。從命令提示符輸入help for以獲取有關FOR變量修飾符的更多信息。

更有效地附上所有生產括號輸出,並重定向到輸出文件只有一次的命令。

@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% 
) 

避免問題的另一種方法是避免使用未加引號的字符來使用延遲擴展。但!在文件名中是有效的,如果延遲擴展包含!字符,將會破壞FOR變量的擴展。所以延遲擴展必須在循環內開啓和關閉。

@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

完美!感謝您解釋所有的錯誤!這裏有很多很棒的信息。你提供的代碼就像CHAMP一樣工作! –

+0

我有一個後續問題。有沒有辦法讓文件列表下降到子目錄中? –

+0

@ user1706790 - 當然,只需使用'for/r %% i ...'。沒有別的東西需要改變。 '%%〜i'將會有完整的路徑,所以'〜f'修飾符不再需要,儘管它沒有任何傷害。 – dbenham