2013-03-03 88 views
1

这是我的例子输入txt文件内容:如何使用批处理脚本从多行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

[此](http://stackoverflow.com/questions/2505857/how-to-remove-the-first-and-last-character-from-a-file-using-batch-script)可能有帮助!但是这显示了如何删除第一个和最后一个字符,但我认为您可以修改它以删除最后两个字符,以便与@dbenham的回答相对应! – R2bEEaton 2016-06-12 14:33:10

回答

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! 
+0

非常好!我正在考虑以某种方式使用' 2013-03-03 18:20:22

相关问题