1

这是我的示例输入 txt 文件内容:

2   12  1   0   0   1
3   13  1   1   0   0
4   14  1   0   1   0
9   19  0   1   0   0

我想得到这个内容:

1`{SEQ=2,ACK=12,CTL=(SYN,on)} ++
1`{SEQ=3,ACK=13,CTL=(FIN,on)} ++
1`{SEQ=4,ACK=14,CTL=(RST,on)} ++
1`{SEQ=9,ACK=19,CTL=(FIN,off)}

所以我使用了批处理脚本:

@echo off
for /f "tokens=1-6 delims=  " %%a in (file.txt) do (
IF %%c==1 IF %%d==0 IF %%e==0 IF %%f==0 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(ACK,on^)^} ^+^+>> SEG1to2.txt
IF %%c==1 IF %%d==1 IF %%e==0 IF %%f==0 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(FIN,on^)^} ^+^+>> SEG1to2.txt
IF %%c==1 IF %%d==0 IF %%e==1 IF %%f==0 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(RST,on^)^} ^+^+>> SEG1to2.txt
IF %%c==1 IF %%d==0 IF %%e==0 IF %%f==1 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(SYN,on^)^} ^+^+>> SEG1to2.txt
IF %%c==0 IF %%d==1 IF %%e==0 IF %%f==0 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(FIN,off^)^} ^+^+>> SEG1to2.txt
IF %%c==0 IF %%d==0 IF %%e==1 IF %%f==0 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(RST,off^)^} ^+^+>> SEG1to2.txt
IF %%c==0 IF %%d==0 IF %%e==0 IF %%f==1 ECHO 1^`^{SEQ=%%a,ACK=%%b,CTL=^(SYN,off^)^} ^+^+>> SEG1to2.txt
)

但当然我得到这个输出:

1`{SEQ=2,ACK=12,CTL=(SYN,on)} ++
1`{SEQ=3,ACK=13,CTL=(FIN,on)} ++
1`{SEQ=4,ACK=14,CTL=(RST,on)} ++
1`{SEQ=9,ACK=19,CTL=(FIN,off)} ++

所以我需要删除最后两个“++”。如何才能做到这一点?我不知道将使用批处理文件中的哪个选项,以及使用多少次。

任何帮助,将不胜感激。谢谢!

4

1 回答 1

3

您可以使用名称中内置的排列以及值中的所需输出来定义变量,而不是使用 IF 语句测试每个排列。然后您可以简单地使用延迟扩展来打印出正确的值。

@echo off
setlocal enableDelayedExpansion
set "map1001=CTL=(SYN,on)} ++"
set "map1100=CTL=(FIN,on)} ++"
set "map1010=CTL=(RST,on)} ++"
set "map0001=CTL=(SYN,off)}"
set "map0100=CTL=(FIN,off)}"
set "map0010=CTL=(RST,off)}"
for /f "tokens=1-6 delims= " %%A in (test.txt) do (
  if defined map%%C%%D%%E%%F echo 1`{SEQ=%%A,ACK=%%B,!map%%C%%D%%E%%F!
)

如果++要出现在除最后一行之外的所有行上,则需要更多的逻辑。

@echo off
setlocal enableDelayedExpansion
set "map1001=CTL=(SYN,on)}"
set "map1100=CTL=(FIN,on)}"
set "map1010=CTL=(RST,on)}"
set "map0001=CTL=(SYN,off)}"
set "map0100=CTL=(FIN,off)}"
set "map0010=CTL=(RST,off)}"
set "ln="
for /f "tokens=1-6 delims= " %%A in (test.txt) do (
  if defined map%%C%%D%%E%%F (
    if defined ln echo !ln! ++
    set "ln=1`{SEQ=%%A,ACK=%%B,!map%%C%%D%%E%%F!"
  )
)
if defined ln echo !ln!
于 2013-03-03T15:40:44.183 回答