2013-07-25 40 views
3

是否也可以忽略一些重複線,而從XML文件刪除其他重複的,例如:如果我的abx.xml是 CODE:批處理腳本刪除重複線,但想忽略/跳過一些行

@echo off 
setlocal disableDelayedExpansion 
set "file=%~1" 
set "line=%file%.line" 
set "deduped=%file%.deduped" 
::Define a variable containing a linefeed character 
set LF=^ 


::The 2 blank lines above are critical, do not remove 
>"%deduped%" (
    for /f usebackq^ eol^=^%LF%%LF%^ delims^= %%A in ("%file%") do (
    set "ln=%%A" 
    setlocal enableDelayedExpansion 
    >"%line%" (echo !ln:\=\\!) 
    >nul findstr /xlg:"%line%" "%deduped%" || (echo !ln!) 
    endlocal 
) 
) 
>nul move /y "%deduped%" "%file%" 
2>nul del "%line%" 

只有BATCH SCRIPT請。

<bookstores> 
    <book id="parent"> 
     <name="it1"/> 
     <name="it1"/> 
     <name="it2"/> 
    </book> 
    <book id="child"> 
     <name="it1"/> 
     <name="it1"/> 
     <name="it2"/> 
     <name="it3"/> 
    </book>  
</bookstores> 

輸出應該是:

<bookstores> 
    <book id="parent"> 
     <name="it1"/> 
     <name="it2"/> 
    </book> 
    <book id="child"> 
     <name="it3"/> 
    </book>  
</bookstores> 

但我得到的輸出是: 注:</book>標記將被刪除。

<bookstores> 
    <book id="parent"> 
     <name="it1"/> 
     <name="it2"/> 
    </book> 
    <book id="child"> 
     <name="it3"/> 

</bookstores> 

我已搜查夫婦呈三角請求,但他們大多是刪除所有重複的行,但不知道如何忽略某些重複的行:

Batch to remove duplicate rows from text file

+0

您試圖將XML視爲純文本文件。它是,它不是。 XML是一種結構,您發佈的鏈接是針對非結構化文件的。有時你必須使用正確的工具來完成這項工作。像['XSLT'](http://stackoverflow.com/questions/355691/how-to-remove-duplicate-xml-nodes-using-xslt)將更適合於此。 – Gray

+0

發佈您的代碼,以便我們不必重新編寫它。 – RGuggisberg

+0

http://stackoverflow.com/questions/11689689/batch-to-remove-duplicate-rows-from-text-file/17859683#17859683給定的鏈接是有代碼的。 – phani

回答

3

這可能會爲你工作,如果你把線始終在%dict%文件打印

@ECHO OFF &SETLOCAL ENABLEDELAYEDEXPANSION 
SET "file=file" 
SET "new=new" 
SET "dict=dictionary" 

(FOR /f "tokens=1*delims=:" %%a IN ('findstr /n "^" "%file%"') DO (
    SET "nr=%%a" 
    SET "line=%%b" 
    SET "this=" 
    FINDSTR /l "!line!" "%dict%" >NUL 2>&1&& ECHO(!line! || (
     FOR /f "tokens=1*delims==" %%x IN ('set "$" 2^>nul') DO IF !line!==%%y SET "this=1" 
     IF "!this!"=="" (
      ECHO(!line! 
      SET "$!nr!=!line!" 
     ) 
    ) 
))>"%new%" 
TYPE "%new%" 

..she會話:

>type file 
    <bookstores> 
     <book id="parent"> 
      <name="it1"/> 
      <name="it1"/> 
      <name="it2"/> 
     </book> 
     <book id="child"> 
      <name="it1"/> 
      <name="it1"/> 
      <name="it2"/> 
      <name="it3"/> 
     </book> 
    </bookstores> 

    >type dictionary 
    </book> 

    >script.bat 
    <bookstores> 
     <book id="parent"> 
      <name="it1"/> 
      <name="it2"/> 
     </book> 
     <book id="child"> 
      <name="it3"/> 
     </book> 
    </bookstores> 
+0

感謝這段代碼,既然這是一個xml文件,我決定使用XSLT來處理xml文件。感謝你的幫助。 – phani