我一直试图用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
谢谢。
答案 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
。