2011-08-08 23 views
0

我正在爲此奮鬥幾個小時,但我無法正常工作。我想要做的是找到一個線批量在html中找到一行,並在其下面添加一些文本

<div id="content"> 

,並添加低於幾行包含類似

<div class="post"> 
    <h2 class="title"><a href="#">**var**</a></h2> 
    <p class="meta"><span class="date">**var**</span> 
    <span class="posted">Posted by <a href="#">**var**</a></span></p> 
    <div style="clear: both;"> 
     &nbsp; 
    </div> 
    <div class="entry moreless"> 
     **var** 
    </div> 
</div> 

一些變量是否有可能?如果是這樣如何?

--David

+0

每條線在該語言中,給定的哪個輸入汽提,用什麼變化?如果它是Unix系統上的一大堆文件,「man sed」或Perl。 – tripleee

+0

你想要一個腳本或其他的東西,自動找到該行,然後將變量放在下面? –

+0

嗯......我想在蝙蝠中做這件事,因爲它很簡單,但是如果你在這裏發佈C程序,我不會與它作鬥爭。我想編輯一個html文件...一切都在標題中。 –

回答

2

可用來解決這個好得多工具。但它可能與Windows批處理!

假設下面的文本是名爲TEMPLATE.HTML的最外面的模板文件。內容觸發行可以縮進,但此解決方案不允許在觸發後添加額外的字符。 (這個限制可以解決,但它會慢下來)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Sample template for building a page</title> 
    <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
</head> 
<body> 
    <div id="content"> 
    </div> 
</body> 
</html> 

下面的示例內容文件(名爲CONTENT_HTML.TXT)包含指定爲!varName的變量!批處理文件將使用延遲擴展來執行變量替換。這意味着如果您希望內容包含驚歎號,則必須以某種方式進行編碼。有兩種選擇。一種是使用HTML字符符號&#33;這適用於文本內容,但如果您需要HTML註釋將無法正常工作。對於評論,我定義了一個!X!變量將被擴展到!

<div class="post"> 
    <h2 class="title"><a href="#">!TITLE!</a></h2> 
    <p class="meta"><span class="date">!DATE!</span> 
    <span class="posted">Posted by <a href="#">!AUTHOR!</a></span></p> 
    <div style="clear: both;"> 
     &nbsp; 
    </div> 
    <div class="entry moreless"> 
     Example with exclamation point&#33;<br /> 
     Another example with exclamation point!X! 
    </div> 
    <!X!-- 
     sample comment 
    --> 
</div> 

最後,這是一個批處理文件,將所有內容放在一起並創建一個名爲FINAL.HTML的輸出文件。我硬編碼變量的值,但它們可以很容易地作爲參數傳入。

@echo off 
setlocal enableDelayedExpansion 
set X=^^^! 
set TITLE=Sample HTML build 
set DATE=%date% 
set AUTHOR=Santa Clause 
set TEMPLATE="template.html" 
set CONTENT="content_html.txt" 
set FINAL="final.html" 

<%TEMPLATE% (
    for /f %%A in ('type %TEMPLATE%^|find /c /v ""') do (
     for /l %%N in (1 1 %%A) do (
     set "ln=" 
     set/p "ln=" 
     echo(!ln! 
     set "test=!ln:*<=<!" 
     if "!test!"=="<div id="content">" (
     for /f "usebackq delims=" %%L in (%CONTENT%) do echo(%%L 
    ) 
    ) 
) 
)>%FINAL% 

沒有與此溶液

  1. 空行(含有隻不過空格線)將從所述內容部分被剝離一些限制。可能不是HTML的問題。消除這種限制會使解決方案複雜化並減慢速度。
  2. 以...開頭的行;將從內容部分中刪除。這個限制很容易被刪除,但代碼很難看。它包括在最後的FOR/F循環中指定<LF>作爲EOL字符。
  3. 模板文件必須使用Windows新行標準<CR> <LF>。使用此解決方案,使用<LF>的Unix樣式文件將失敗。這也可以解決,但它又會使事情複雜化並放慢速度。
  4. 如前所述,模板中的內容觸發器可以包含前導空格,但不能在行上包含任何後續字符。消除這一限制會減慢過程。
  5. 行被限制在模板1024個字符
  6. 尾隨控制字符是從在模板
+0

不錯的一個!我們已經用php做了,但它的速度很慢,所以這將是一個很好的解決方案:)。我必須學習一些東西,我會稍後再試。對不起回答一個月後,但我沒有檢查stackoverflow的一點,因爲我沒有任何問題,我確實認爲我的一些未回答的將被回答:)。 –

+0

@DavidDebnar我修改了代碼。在用'set \ p'讀取之前,我添加了一個關鍵的'set'ln =「',以便正確處理空白行。 – dbenham

相關問題