2011-04-10 61 views
1

我需要去掉文本文件的一部分並將其寫入另一個文本文件。剝離的文本文件也應該保存。批量查找和複製行

前:

Original.txt = "<xml><something>values</something><script>TEXT-TO-DELETE</script></xml>" 

後:

Original.txt = "<xml><something>values</something><script></script></xml>" 

Original_script.txt = "TEXT-TO-DELETE" 

.. 這是一個多行的文件,因此該腳本段跨越多條線路。

我嘗試了發佈的腳本,但無法理解語法。

"@echo off & setlocal 
set "Data=D:\Original.txt" 
set "Bak=%Data%.bak" 
move "%Data%" "%Bak%" 
for /f "usebackq delims=" %%i in ("%Bak%") do set "LINE=%%i" & call :ProcessLine 
REM del "%Bak%" 
goto :eof 
:ProcessLine 
echo %LINE%>>"%Data%" 
echo %LINE%|findstr /b "<script>">nul || goto :eof 
goto :eof" 

這應該是Windows計算機。(新的操作系統支持)

編輯:因爲我不能在我自己的線程回答,我在這裏:

感謝您的回答。 不幸的是,我不想爲此使用共享軟件。 我解析另一種語言,我只需要去掉這個。

這是一個荒謬3-襯墊:

file={"p1.txt","p2.txt","p1.txt"} 
find={"<search>","</search>,"<xml>"} 
count=1 
foreachline in file[count] print line to file[count] 
if find[count] in line then count++ 

或相似。如果沒有1000種方式/腳本,我可以自己想象一下。只是認爲一些破解會給它一分鐘。

+1

您必須對文件內容更精確。一個例子是最好的。 – Mat 2011-04-10 16:19:08

+0

您能更清楚地說明您要使用哪種編程語言或腳本語言嗎?並在哪個操作系統上? – 2011-04-10 16:41:04

+0

這應該儘可能通用。我有win7 64bit。應該是dos類型的批處理腳本。 更新OP! – user700994 2011-04-10 20:08:27

回答

1

我認爲帶CLI的XSLT處理器是最合適的工具。 AltovaXML2011是我現在最常用的一個。

然後,該腳本可以是這樣的,在script元素的內容提取到Original_script文件,然後更新您的原始文件:

@echo off 
set orig="D:\Original.txt" 
set script="D:\Original_script.txt" 
set backup="D:\Original_backup.txt" 
set xsltprocessor="D:\AltovaXML.exe" 
move %orig% %backup% 
::extract scripts 
%xsltprocessor% -xslt1 "D:\ExtractScripts.xslt" -in %backup% -out %script% 
::update original 
%xsltprocessor% -xslt1 "D:\UpdateOriginal.xslt" -in %backup% -out %orig% 
::del %backup% 

隨着ExtractScripts.xslt這樣看,它提取所有script元素的含量(添加新行):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" omit-xml-declaration="yes"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="//script"/> 
    </xsl:template> 
    <xsl:template match="//script"> 
     <xsl:apply-templates/> 
     <xsl:text> 
</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

隨着UpdateOriginal.xslt這樣看,它只是複製整個原始文件,但省去了所有內容個元素(已分別提取):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 
    <xsl:template match="//script"> 
     <xsl:copy/> 
    </xsl:template> 
</xsl:stylesheet> 

您可以選擇保留或刪除後的備份文件。

+0

嗨..感謝您的答案。 – user700994 2011-04-11 13:25:34

+0

我在o-thread中發表了評論 – user700994 2011-04-11 13:47:01