提取并输出特定单词之间的行CMD .BAT文件(Windows)[已关闭]

qnakjoqk  于 2022-12-19  发布在  Windows
关注(0)|答案(1)|浏览(122)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
这篇文章是8小时前编辑并提交审查的。
Improve this question
我想得到给定字符串之间的文本/行。
示例

#######LIST 1
item 1
item 2
item 3

######LIST 2

我希望输出的内容:
#######LIST 1######LIST 2之间的线

@echo off
for /F "tokens=* USEBACKQ" %%F in (` | findstr "###### LIST 1" `) do (
    set string=%%F
)
set string=%string:~68%
set string=%string:~,-1%
echo %string%
for /F "tokens=* USEBACKQ" %%F in (`findstr /I /C:"###### LIST 2" text.txt`) do (
    set string2=%%F
)
set string2=%string2:~68%
set string2=%string2:~,-1%
echo %string2%
n6lpvg4x

n6lpvg4x1#

可通过以下方式完成该任务:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "OutputLines="
for /F usebackq^ delims^=^ eol^= %%I in ("%~dp0Text File.txt") do (
    if not defined OutputLines (
        if "%%I" == "#######LIST 1" set OutputLines=1
    ) else (
        if "%%I" == "######LIST 2" goto Finish
        echo(%%I
    )
)
:Finish
endlocal

如果批处理文件必须以某种方式处理#######LIST 1######LIST 2之间的非空行,则可以使用echo(%%I以外的其他命令。如果通过双击Windows文件资源管理器中的批处理文件来执行批处理文件,则可以在:Finish和最后一行endlocal之间插入更多命令行,以执行类似pause的操作从已经打开的命令提示符窗口中运行它以查看输出。
请注意,在这个例子中,在######LIST 2行的末尾有一个尾随空格。上面的代码要求在标记要处理的部分的开始和结束的两行末尾没有尾随空格(=只是这个例子代码的输出)。
要了解所使用的命令及其工作原理,请打开一个command prompt窗口,在其中执行以下命令,然后完整而仔细地阅读每个命令显示的帮助页面。

  • call /? ...解释%~dp0驱动器和参数0的路径,它是始终以反斜杠结尾的批处理文件的完整路径。在上面的代码中可以省略%~dp0,以便处理当前目录(而不是批处理文件目录)中名为Text File.txt的文本文件。
  • x1米11米1x
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • set /?
  • setlocal /?

另见:

相关问题