Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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_Replace - Fatal编程技术网

Batch file 如何在文本文件中查找一个单词并删除包含该单词的行和接下来的两行?

Batch file 如何在文本文件中查找一个单词并删除包含该单词的行和接下来的两行?,batch-file,replace,Batch File,Replace,我想使用批处理文件在文本文件中查找一个单词,然后我想删除包含该单词的那一行,并删除下面的一些其他行,例如: _italic_ or **bold** put returns between paragraphs indent code by 4 spaces indent code by 4 spaces _italic_ or **bold**2 因此,结果应该是: _italic_ or **bold** _italic_ or **bold**2 以下是此任务的批处理代码,仅适用于不包

我想使用批处理文件在文本文件中查找一个单词,然后我想删除包含该单词的那一行,并删除下面的一些其他行,例如:

_italic_ or **bold**
put returns between paragraphs
indent code by 4 spaces
indent code by 4 spaces
_italic_ or **bold**2
因此,结果应该是:

_italic_ or **bold**
_italic_ or **bold**2

以下是此任务的批处理代码,仅适用于不包含空行的输入文本文件,因为这些行被的命令跳过

它删除带有3行的所有块,其中第一行包含
返回

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
此批处理文件处理每个非空行。用于的命令将自动跳过不包含任何字符的所有行

注1:
eol=^
与FOR的命令保持一致是读入和输出仅包含逗号或分号的行所必需的,否则也会被FOR的命令忽略

如果当前不应跳过任何行,则将当前行分配给变量
line
。接下来,如果行中至少包含一个
returns
,则该行中出现的所有单词
returns
都不区分大小写

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
如果从文件中读取的字符串替换为未修改的行后,变量
line
的字符串不相等,则忽略该行,因为这意味着该行至少包含一个返回的

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
否则,从输入文件读取的行将附加到输出文件

注2:
介于
echo
%%I
之间)用于输出仅包含1个或多个空格或制表符的输入行,否则使用空格代替
对于这种情况,命令echo将其当前状态
OFF
写入输出文件,而不是从输入文件读取的空格/制表符

至少有一个
返回值的行之后的下两行也将被忽略,以便复制到输出文件

作为最后一个命令,已删除3行的已创建输出文件将移到输入文本文件上

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • del/?
  • echo/?
  • 获取/?
  • 如果/?
  • 移动/?
  • 设置/?
  • setlocal/?

另请阅读有关Microsoft的文章。

此处是此任务的批处理代码,仅适用于不包含空行的输入文本文件,因为这些行被
的命令跳过

它删除带有3行的所有块,其中第一行包含
返回

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
此批处理文件处理每个非空行。FOR的命令自动跳过所有不包含任何字符的行

注1:
eol=^
与FOR
的命令保持一致是读入和输出仅包含逗号或分号的行所必需的,否则也会被FOR的命令忽略

如果当前不应跳过任何行,则将当前行分配给变量
line
。接下来,如果该行至少包含一个
returns
,则该行中出现的所有单词
returns
都不区分大小写

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
如果从文件中读取的字符串替换为未修改的行后,变量
line
的字符串不相等,则忽略该行,因为这意味着该行至少包含一个返回的

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
否则,从输入文件读取的行将附加到输出文件

注2:
介于
echo
%%I
之间)用于输出仅包含1个或多个空格或制表符的输入行,否则使用空格代替
对于这种情况,命令echo将其当前状态
OFF
写入输出文件,而不是从输入文件读取的空格/制表符

至少有一个
返回值的行之后的下两行也将被忽略,以便复制到输出文件

作为最后一个命令,已删除3行的已创建输出文件将移到输入文本文件上

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • del/?
  • echo/?
  • 获取/?
  • 如果/?
  • 移动/?
  • 设置/?
  • setlocal/?

另请阅读有关Microsoft的文章。

此处是此任务的批处理代码,仅适用于不包含空行的输入文本文件,因为这些行被
的命令跳过

它删除带有3行的所有块,其中第一行包含
返回

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
此批处理文件处理每个非空行。FOR的命令自动跳过所有不包含任何字符的行

注1:
eol=^
与FOR
的命令保持一致是读入和输出仅包含逗号或分号的行所必需的,否则也会被FOR的命令忽略

如果当前不应跳过任何行,则将当前行分配给变量
line
。接下来,如果该行至少包含一个
returns
,则该行中出现的所有单词
returns
都不区分大小写

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
如果从文件中读取的字符串替换为未修改的行后,变量
line
的字符串不相等,则忽略该行,因为这意味着该行至少包含一个返回的

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "SkipLineCount=0"
set "OutputFile=OutputTextFile.txt"
del "%OutputFile%" 2>nul
for /F "usebackq eol=^ delims=" %%I in ("InputTextFile.txt") do (
    if !SkipLineCount! EQU 0 (
        set "Line=%%I"
        set "Line=!Line:returns=!"
        if "!Line!" NEQ "%%I" ( set "SkipLineCount=1" ) else echo(%%I>>"%OutputFile%"
    ) else (
        set /A SkipLineCount+=1
        if !SkipLineCount! EQU 3 set "SkipLineCount=0"
    )
)
move /Y "%OutputFile%" "InputTextFile.txt"
endlocal
否则