Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用批处理脚本从多行txt文件中删除最后一个字符?_Batch File_Character - Fatal编程技术网

Batch file 如何使用批处理脚本从多行txt文件中删除最后一个字符?

Batch file 如何使用批处理脚本从多行txt文件中删除最后一个字符?,batch-file,character,Batch File,Character,这是我的示例输入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)} 所以我

这是我的示例输入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)} ++
所以我需要删除最后两个“++”。如何做到这一点? 我不知道批处理文件中的哪个选项将被使用,以及使用了多少次


任何帮助都将不胜感激。谢谢

不必使用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!

很不错的!我在考虑雇用
可能会有帮助!然而,这显示了如何删除第一个和最后一个字符,但是我认为您可以修改它来删除最后两个字符,只是为了与@dbenham的答案相对应!