Batch file 批处理脚本即使文本中有|符号,如何继续读取IF函数?

Batch file 批处理脚本即使文本中有|符号,如何继续读取IF函数?,batch-file,if-statement,scripting,Batch File,If Statement,Scripting,我正在使用IF函数比较并将其回显到文件中。 我注意到它没有读带“|”的行 文件: 代码: 我需要以Running开头的关键字的所有结果: 请帮助,谢谢。如Lưu Vĩnh Phúc所示,当扩展%%a以生成要执行的调用命令时,您的问题就会发生。此生成的命令包括管道操作符。避免这种情况的最简单方法是避免调用命令,使用for/f命令的tokens子句拆分输入行 tokens=1,*表示使用空格或制表符(默认值),将读取行标记化,并将第一个标记检索到%%a(指示的可替换参数)中,将行的其余部分(*)检索

我正在使用IF函数比较并将其回显到文件中。 我注意到它没有读带“|”的行

文件:

代码:

我需要以Running开头的关键字的所有结果:
请帮助,谢谢。

如Lưu Vĩnh Phúc所示,当扩展
%%a
以生成要执行的
调用
命令时,您的问题就会发生。此生成的命令包括管道操作符。避免这种情况的最简单方法是避免调用
命令,使用
for/f
命令的
tokens
子句拆分输入行

tokens=1,*
表示使用空格或制表符(默认值),将读取行标记化,并将第一个标记检索到
%%a
(指示的可替换参数)中,将行的其余部分(
*
)检索到
%%b
(下一个字符)

@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“file=input.txt”
>“report.csv”(
回显%date%%时间%
对于/f“usebackq令牌=1,*”%%a在(“%file%”)中,请执行以下操作(
如果“%%a”==”正在运行:“echo”操作系统:,%%b
)
)

当展开
CALL:process%%a
时,它会变成
CALL:process Running:Microsoft Windows 7 | 2008
,类似于管道,因此需要引用或转义管道符号
Running: Microsoft Windows 7|2008
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
Running: Microsoft Windows 2008
ExampleExampleExampleExampleExample
Running: Microsoft Windows 2008
ExampleExampleExampleExampleExample
Running: Microsoft Windows XP|2003
ExampleExampleExampleExampleExample
ExampleExampleExampleExampleExample
Running: Microsoft Windows 7|2008
@echo off
set local

set "file1=C:\Users\Intern3\Downloads\Nmap\1.txt"
echo %date%, %time% > report1.csv

FOR /f "usebackq delims=" %%a IN ("%file1%") DO (CALL :process %%a)

goto :eof

:process
IF "%~1"=="Running:" echo "Operating System:", %~2 >> report1.csv