逃离管道" |"在for循环中调用,在" |"之后获取数据。不起作用

时间:2017-04-12 03:46:48

标签: windows batch-file for-loop scripting

我一直试图用Pipe" |"读取一行。在里面。 我注意到没有转义管道^ |它将忽略整行。 所以我添加了它,但它现在似乎只是读取管道直到管道" |"仅

文本:

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 (
echo %%a
pause
CALL :process %%a)

goto :eof

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

我在for循环中添加了echo %% a检查输出。 我用if检查"运行:" 我用^ |但它只能读到" |"只要 我需要的是整条线,不包括"跑步:"

输出我将从代码中获得:

04/12/2017 Wed, 11:44:11.42 
"Operating System:", Microsoft Windows 7   
"Operating System:", Microsoft Windows 2008   
"Operating System:", Microsoft Windows 2008   
"Operating System:", Microsoft Windows XP   
"Operating System:", Microsoft Windows 7   

谢谢。

1 个答案:

答案 0 :(得分:1)

问题在于

FOR /f "usebackq delims=^|" %%a IN ("%file1%") DO (

将根据提供的分隔符集标记数据行。

该行被解释为

anyofthedelimiters TOKEN1的 anyofthedelimiters 的Token2的 anyofthedelimiters 的Token3的 anyofthedelimiters 的Token4

与行上存在的许多令牌一样。

您可以在选项中加入tokens=1,2,3以及delims=子句(我之前之前 delims=),然后选择指定的令牌,应用它们对于后续的元变量,因此如果%%a被指定为元变量,则tokens=1,2,3会将token1分配给%%a,将token2分配给%%b,将token3分配给%%c。所选的令牌号不必是连续的,因此tokens=1,3会将token1分配给%%a,将token3分配给%%b

特殊令牌*表示"该行的所有其余内容,逐字逐句,在最高指定令牌号后#34;

因此,在该数据行中选择tokens=1,*会将|之后的剩余行提供给%%b