这是我的示例输入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)} ++
所以我需要删除最后两个“++”。如何才能做到这一点? 我不知道将使用批处理文件中的哪个选项,以及使用了多少次。
任何帮助将不胜感激。谢谢!
答案 0 :(得分: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!