2013-07-25 2 views
3

Это также можно игнорировать некоторые повторяющиеся строки в то время как удаление других дубликатов из файла XML, пример: если мой abx.xml является КОД:Пакетный скрипт для удаления дубликатов строк, но хотел игнорировать/пропустить некоторые строки

@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 ll session:

>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

Смежные вопросы