Findstr "<path>" возвращает неверный результат.Если использовать любую другую строку, она работает отлично - PullRequest
0 голосов
/ 12 июня 2018

Я извлекаю некоторые специфические строки из файла XML, чтобы создать файл .TXT.Настоящий XML намного сложнее, поэтому это очень упрощенная версия, просто чтобы показать проблему со строкой <path> на FOR /F "tokens=* delims= " %%X in ('findstr "<path> <descr>" "%input_xml%"').

Это XML (xmlfile_fruits.xml):

  <fruit>
      <path>./111/222/banana.zip</path>
      <descr>xxx / yyy / zzz</descr>
  </fruit>
  <fruit>
      <path>./111/222/orange.zip</path>
      <descr>N/A</descr>
  </fruit>
  <fruit>
      <path>./111/222/apple.zip</path>
      <descr></descr>
  </fruit>
  <fruit>
      <path>./111/222/lemon.zip</path>
      <descr>xxx / yyy / zzz</descr>
  </fruit>
  <fruit>
      <path>./111/222/pineaple.zip</path>
      <descr>abc/def/ghi</descr>
  </fruit>
  <fruit>
      <path>./111/222/banana.zip</path>
      <descr></descr>
  </fruit>

И это пакет, который я использую для получения 3 списков, один с содержимым из <path> и <descr>, другой с содержимым только из <descr> и третий список с <descr> с уникальными значениями.

@echo off
setlocal enabledelayedexpansion

set "input_xml=xmlfile_fruits.xml"

if exist List_path.txt del List_path.txt
if exist List_descr.txt del List_descr.txt

FOR /F "tokens=* delims= " %%X in ('findstr "<path> <descr>" "%input_xml%"') do (
  set "line=%%X"
  if "!line:~0,6%!"=="<path>" (
  set "path=!line:~6,-7!"
  ::get a list with filename.extension only
  for %%I in ("!path!") do echo %%~nI%%~xI>>List.txt
  ) else (
  set "descr=!line:~7,-8!"
  ::get the lists
  echo !descr!>>List.txt
  echo !descr!>>List_descr.txt
  )
)
::remove duplicate lines
if exist "List_unique_descr.txt" del "List_unique_descr.txt"
::scan all the <descr> from List_descr.txt
FOR /F "tokens=* usebackq delims=" %%8 in ("List_descr.txt") do (
  findstr /x /c:"%%~8" "List_unique_descr.txt">NUL || echo %%8>>List_unique_descr.txt
) >nul 2>nul
pause

Что-то не так происходит с 'findstr "<path> <descr>" "%input_xml%"', особенно со строкой <path>.По какой-то причине последняя часть моего кода не работает, и "List_unique_descr.txt" генерируется неправильно.

Вот что я получаю:

xxx / yyy / zzz
N/A
ECHO is off.
xxx / yyy / zzz
abc/def/ghi
ECHO is off.

Должно быть так:

xxx / yyy / zzz
N/A
ECHO is off.
abc/def/ghi

Однако, если мы заменим слово <path> в Findstr на другое, например, <name>, код будет работать нормально.Конечно, в XML-файле также необходимо заменить <path>.Но это не решение, потому что мне нужно уважать структуру XML, как она есть.

И, если я оставлю <path>, я замечу еще несколько ошибок, если использую команду сортировки и команду поискаа также.

Кто-нибудь может помочь мне понять, что происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...