【问题标题】:How to use multiple find commands in the for loop in batch?如何在for循环中批量使用多个find命令?
【发布时间】:2018-11-01 13:46:25
【问题描述】:

我有以下代码:

set "string_pdf=<module>PDF-hul</module>"
set string1=Well-Formed and valid
set /a loop100=0

for /f "tokens=*" %%i in ('dir /a-d /b /s %output%') do (
    for /f "tokens=3 delims=>/<" %%p in ('find  "%string_pdf%" "%%i" && find "%string1%" "%%i" ') do (
        echo %%~ni >> %output%\pdf_hul.txt
        set /a loop100+=1
    )
)

我正在浏览位于 %output% 文件夹中的所有 XML,并试图在一个 xml 文件中找到 Well-Formed and valid&lt;module&gt;PDF-hul&lt;/module&gt; 的共同出现。当我仅使用一个查找命令搜索一个变量时,此代码有效。但是当我添加第二个时,我得到一个语法错误。

如何在一个 xml 中找到两个变量 string_pdfstring1(不在一行中)?

【问题讨论】:

  • 你必须转义&amp;&amp; --> ^&amp;^&amp;

标签: batch-file for-loop find


【解决方案1】:

您将不得不转义 &amp;&amp; --> ^&amp;^&amp; 但是
IMO 的第二个 for 不是必需的,只需使用带有两个字符串的 findstr 和
成功的条件执行&amp;&amp; 并抑制 findstr 的任何输出

:: Q:\Test\2018\11\01\SO_53102597.cmd
@Echo off
set output=X:\Path
set "string_pdf=<module>PDF-hul</module>"
set string1=Well-Formed and valid
set /a loop100=0

for /f "tokens=*" %%i in ('dir /a-d /b /s "%output%*.xml"') do (
    findstr /IM /c:"%string_pdf%" "%%i" >NUL 2>&1 && (
        findstr /IM /c:"%string1%" "%%i" >NUL 2>&1 && (
            echo %%~ni >> %output%\pdf_hul.txt
            set /a loop100+=1
        )
    )
)
set loop

【讨论】:

  • 这适用于一个计数器循环100。但是,如果我想另外计算例如的发生率string_pdf 和 string2 我使用计数器 loop200 并复制 ( findstr /c:"%string_pdf%" /c:"%string2%" "%%i" >NUL 2>&1 && ( echo %%~ni >> %output% \pdf_hul.txt set /a loop200+=1 ) 在这种情况下,计数器不能正常工作。
  • ATM 计算共现,要单独计算它们,您需要单独的 findstr 只增加一次出现。
  • 我不明白你是什么意思把它们分开?
  • 据我了解,我无法仅使用一个计数器单独计算同时出现的次数
  • 你说得对,我修改了代码,请检查一下。一个错误是目录上没有扩展名,并且 findstr 必须嵌套,否则它是一个或不是一个和代码。
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 2011-01-16
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多