String Findstr“&书信电报;路径>&引用;返回错误的结果。如果使用任何不同的字符串,它都可以完美地工作

String Findstr“&书信电报;路径>&引用;返回错误的结果。如果使用任何不同的字符串,它都可以完美地工作,string,windows,batch-file,String,Windows,Batch File,我正在从XML文件中提取一些特定的行,以便生成一些.TXT文件。 真正的XML要复杂得多,因此这是一个非常简化的版本,只是为了帮助说明/F“tokens=*delims=“%%X in('findstr”“%input_XML%”)的上的字符串的问题。 这是XML(xmlfile\u fruits.XML): 应该是这样的: xxx / yyy / zzz N/A ECHO is off. abc/def/ghi 但是,如果我们将中的单词替换为任何不同的单词,例如,则代码工作正常。当然,还需要

我正在从XML文件中提取一些特定的行,以便生成一些.TXT文件。 真正的XML要复杂得多,因此这是一个非常简化的版本,只是为了帮助说明/F“tokens=*delims=“%%X in('findstr”“%input_XML%”)的
上的字符串
的问题。

这是XML(
xmlfile\u fruits.XML
):

应该是这样的:

xxx / yyy / zzz
N/A
ECHO is off.
abc/def/ghi
但是,如果我们将
中的单词
替换为任何不同的单词,例如
,则代码工作正常。当然,还需要替换XML文件上的
。但这不是解决方案,因为我需要尊重XML结构

而且,如果我把
留在那里,如果我同时使用Sort命令和Find命令,我会注意到更多的错误


任何人都可以帮助我了解发生了什么?

使用
PowerShell
相反,它是操作系统的一部分,并且具有对
XML
的广泛内置支持。我想我们在前面的一些问题中提到过,您所做的是强制执行XML文件。所有其他三种Windows本机脚本语言都有读取和写入XML文件的本机方法。随着XML变得更加复杂,使用暴力方法将变得更加困难。你应该考虑使用VBScript、JScript或PufS壳来完成这项任务。是的,你是对的。我可以学习Powershell并在将来的项目中使用。我在这里写的剧本已经准备好了。99%完成了。唯一的问题是与in-Findstr命令不一致。所以,忘了我们正在处理XML。我所需要的就是使用一个在某个点上失败的脚本来操作一些行。我可以再次得到您的帮助吗?不要在括号内的代码块中使用双冒号作为注释。它造成了无法预料的问题。使用标准的comment命令,即
REM
。您还重写了一个非常重要的系统变量。除非您知道自己在做什么,否则切勿将单词
PATH
用作变量名。更改该系统变量后,它将不再能够找到
FINDSTR
命令的位置。
@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
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