Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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 从顶部或从多个文本文件中删除包含特定字符或字符串的文本行_Batch File_Cmd_Findstr - Fatal编程技术网

Batch file 从顶部或从多个文本文件中删除包含特定字符或字符串的文本行

Batch file 从顶部或从多个文本文件中删除包含特定字符或字符串的文本行,batch-file,cmd,findstr,Batch File,Cmd,Findstr,我在同一目录中有歌词文本文件,我想根据这些规则从中删除几行: A.删除所有包含方括号的行[] B.从顶部移除三条非空线 C.从底部移除两条非空线 例如,对于多个文件,像这样的命令行是否可以固定为do(a) type *.txt | findstr /v LYRICS | findstr /v "[" | findstr /v "]" >*.txt 吉尔伯特主要编辑-我测试并调试了我的代码。有很多虫子 我想这应该能让你接近。但我还是不确定我是否理解你的非空状态 此代码将修改当前目录中的所有

我在同一目录中有歌词文本文件,我想根据这些规则从中删除几行:

A.删除所有包含方括号的行[]

B.从顶部移除三条非空线

C.从底部移除两条非空线

例如,对于多个文件,像这样的命令行是否可以固定为do(a)

type *.txt | findstr /v LYRICS | findstr /v "[" | findstr /v "]" >*.txt

吉尔伯特

主要编辑-我测试并调试了我的代码。有很多虫子

我想这应该能让你接近。但我还是不确定我是否理解你的非空状态

此代码将修改当前目录中的所有.TXT文件。对于每个文件,应删除前3行、最后2行以及包含[或]的任何行。在第1个位置以:开头的任何行都将具有前导:剥离

@echo off
for %%F in (*.txt) do (
  for /f %%N in ('find /c /v "" ^<"%%F"') do set bottom1=%%N
  set /a bottom2=bottom1-1
  (
    for /f "tokens=1* delims=:" %%A in (
      'findstr /n "^" "%%F" ^| findstr /vr /c:"\[" /c:"\]" /c:"^1:" /c:"^2:" /c:"^3:" /c:"^%%bottom1%%:" /c:"^%%bottom2%%:"'
    ) do echo(%%B
  )>"%%~nF.mod"
  rem del "%%F"
  rem ren "%%~nF.mod" "%%~nxF"
)
@echo关闭
对于(*.txt)中的%%F,请执行以下操作(

对于('find/c/v”“^主要编辑中的/f%%N,我测试并调试了我的代码。有许多错误

我想这应该能让你接近。但我还是不确定我是否理解你的非空状态

此代码将修改当前目录中的所有.TXT文件。对于每个文件,它应删除前3行、后2行以及包含[或]的任何行。任何以:开头的行在第一个位置都将有前导:删除

@echo off
for %%F in (*.txt) do (
  for /f %%N in ('find /c /v "" ^<"%%F"') do set bottom1=%%N
  set /a bottom2=bottom1-1
  (
    for /f "tokens=1* delims=:" %%A in (
      'findstr /n "^" "%%F" ^| findstr /vr /c:"\[" /c:"\]" /c:"^1:" /c:"^2:" /c:"^3:" /c:"^%%bottom1%%:" /c:"^%%bottom2%%:"'
    ) do echo(%%B
  )>"%%~nF.mod"
  rem del "%%F"
  rem ren "%%~nF.mod" "%%~nxF"
)
@echo关闭
对于(*.txt)中的%%F,请执行以下操作(

对于/f%%N in('查找/c/v“”^是否需要保留空行?如果第1行为空-是否应删除前3行非空行?与最后2行非空行的问题类型相同?是否需要保留空行?如果第1行为空-是否应删除前3行非空行?与最后2行非空行的问题类型相同?感谢dbenham的quick回答。它似乎失败了,消息是“<此时意外”。您认为原因是什么?输出:'C:\tmp\Test1>Test1 C:\tmp\Test1>setlocal enableDelayedExpansion<此时意外。C:\tmp\Test1>对于/f%N in('find/v')当然是这样的-我忘记在in()中转义了子句。这已在上面修复。我恐怕它也失败了。使用:C:\tmp\Test1>setlocal enableDelayedExpansion此时是意外的。C:\tmp\Test1>“findstr/n”^“%F”^;“findstr/vr/C:”/C:“^1:”/C:“^2:/C:”/C:“^3:/C:“^!bottom1!:”/C:“^^!bottom2!”'C:\tmp\Test1>@Gilbert-我终于测试并调试了代码。它现在应该可以工作了。太好了!正如你建议的那样,我删除了两行REM代码,并将findstr中的/vr开关更改为/v,这样它将删除“[”或”所在的完整行[”,或其他。它工作得很好。非常感谢!感谢dbenham的快速回答。它似乎失败了,并显示消息“<此时出乎意料。”。您认为原因是什么?输出:'C:\tmp\Test1>Test1 C:\tmp\Test1>setlocal enableDelayedExpansion<此时出乎意料。C:\tmp\Test1>for/f%N in('find/v''当然了-我忘了在in()子句中退出重定向。这已经在上面得到了修复。我担心它也失败了。使用:C:\tmp\Test1>setlocal enableDelayedExpansion此时是意外的。C:\tmp\Test1>'findstr/n“^”“%F”“findstr/vr/C:”[“/C:””/C:“^1:”/C:“^2:/C:“^3:”/C:“^!bottom1:”/C:“^^!bottom2!”:“'C:\tmp\Test1>@Gilbert-我终于测试并调试了代码。它现在应该可以工作了。太棒了!正如你建议的那样,我删除了两条REM行,并将findstr中的/vr开关更改为/v,这样它将删除找到“[”或“[”或其他行的完整行。它工作得非常好。非常感谢!