Batch file 批处理|复制循环中两行之间的文本

Batch file 批处理|复制循环中两行之间的文本,batch-file,Batch File,我想将所有零件从LOAD复制到后续的(分号)和这个在一个循环中。我是新来的批处理,我想知道是否有可能做到这一点与批处理,thx 这是我的txt文件: 我需要从加载到的所有东西 我的想法是: 在文本->保存行号1中搜索第一个LOAD,然后搜索下一个在文本中-保存行号2 然后在目标txt文件中复制块(从行号1到行号2) 删除所有文本,直到第2行 再次启动脚本(循环),并将每个新文本块添加到目标文件中 当到达文本末尾且文本中没有LOAD时结束脚本 它会查找起始行并删除所有到起始行的行 我认为搜索分号

我想将所有零件从
LOAD
复制到后续的
(分号)和这个在一个循环中。我是新来的批处理,我想知道是否有可能做到这一点与批处理,thx

这是我的txt文件:

我需要从
加载
的所有东西

我的想法是:

  • 在文本->保存行号1中搜索第一个
    LOAD
    ,然后搜索下一个
    在文本中-保存行号2
  • 然后在目标txt文件中复制块(从行号1到行号2)
  • 删除所有文本,直到第2行
  • 再次启动脚本(循环),并将每个新文本块添加到目标文件中
  • 当到达文本末尾且文本中没有
    LOAD
    时结束脚本
    • 它会查找起始行并删除所有到起始行的行
    • 我认为搜索分号行应该有效
    • 但它不会将textblock复制到target.txt文件
    • 问题->
      sed-n“%startine%”、“%semicolonLine%”>target.txt
    • 第一个问题:如何使用行变量来定义要传输到目标文件的textblock?我可以这样使用
      sed
      命令吗

    • 第二个问题:我不知道如何循环批处理脚本?我找到了命令
      goto start
      。但这似乎不起作用。脚本什么时候结束运行

    这不会从行尾修剪任何空格,因为问题中的示例具有尾随空格。通过管道传输到
    findstr
    echo
    可能存在特殊字符问题。我尝试了一个延迟的扩展版本,但仍然可能出现问题

    另一种选择:

    @echo off
    setlocal
    
    set "target=C:\Users\ebeta\Desktop\work3\data.txt"
    set "pattern=(?sm)^LOAD .+?;"
    
    powershell -noprofile -command^
     "$content = get-content -path '%target%' -raw;"^
     "$content = $content -replace '(?m)\s+$','';"^
     "$load = select-string '%pattern%' -input $content -allmatches;"^
     "if ($load.matches.count -eq 0) {exit 1};"^
     "set-content -path '%target%' -value $load.matches -force"
    
    if errorlevel 1 (
        >&2 echo No replacements occurred.
        exit /b 1
    )
    
    此代码使用
    powershell
    修剪尾随空格并获取感兴趣的文本。如果发生替换,则
    errorlevel
    将为
    0
    ,否则
    1
    。不知道任何问题。最后的
    if errorlevel 1
    只是为了说明如何检查是否发生了故障。
    目标
    仅在确实发生替换时写入,与先前删除文件的代码不同。如果不需要替换而需要空白文件,请删除
    powershell
    命令的最后第二行:

    "if ($load.matches.count -eq 0) {exit 1};"^
    
    是要删除的可选行

    这不会从行尾修剪任何空格,因为问题中的示例具有尾随空格。通过管道传输到
    findstr
    echo
    可能存在特殊字符问题。我尝试了一个延迟的扩展版本,但仍然可能出现问题

    另一种选择:

    @echo off
    setlocal
    
    set "target=C:\Users\ebeta\Desktop\work3\data.txt"
    set "pattern=(?sm)^LOAD .+?;"
    
    powershell -noprofile -command^
     "$content = get-content -path '%target%' -raw;"^
     "$content = $content -replace '(?m)\s+$','';"^
     "$load = select-string '%pattern%' -input $content -allmatches;"^
     "if ($load.matches.count -eq 0) {exit 1};"^
     "set-content -path '%target%' -value $load.matches -force"
    
    if errorlevel 1 (
        >&2 echo No replacements occurred.
        exit /b 1
    )
    
    此代码使用
    powershell
    修剪尾随空格并获取感兴趣的文本。如果发生替换,则
    errorlevel
    将为
    0
    ,否则
    1
    。不知道任何问题。最后的
    if errorlevel 1
    只是为了说明如何检查是否发生了故障。
    目标
    仅在确实发生替换时写入,与先前删除文件的代码不同。如果不需要替换而需要空白文件,请删除
    powershell
    命令的最后第二行:

    "if ($load.matches.count -eq 0) {exit 1};"^
    

    是要删除的可选行。

    是,这是可能的!如果你写了它,它展示了一个问题,请随时更新你的问题,使之成为主题。你已经发布了一个需求列表。首先自己努力解决这个问题。这里有一些现有的帖子可以解决您试图做的事情的各个部分,比如在文本文件中定位特定文本、从文本文件中删除文本等等。您已经列出了几个任务。选择其中一个,并使用此处现有的问题来完成这项工作。当你的工作完成后,开始下一步的工作。冲洗并重复,直到你的工作。如果您在过程中遇到问题,您可以解释您遇到的问题,以a的形式包含您的代码,然后提问。谢谢您的快速回答。我需要一个可能的save呼叫,因为我在上面搜索了几个小时,但没有找到我的问题。这就是我的意图。我是否必须在新帖子中将我的问题发布到脚本中?感谢如果
    for
    循环或类似过程处理整个文件,则第二个问题已过时
    goto start
    使解释器搜索一行
    :start
    ,该行称为标签。我没有使用sed
    ,所以我在回答中避免了它。考虑一下刷新。是的,这是可能的!如果你写了它,它展示了一个问题,请随时更新你的问题,使之成为主题。你已经发布了一个需求列表。首先自己努力解决这个问题。这里有一些现有的帖子可以解决您试图做的事情的各个部分,比如在文本文件中定位特定文本、从文本文件中删除文本等等。您已经列出了几个任务。选择其中一个,并使用此处现有的问题来完成这项工作。当你的工作完成后,开始下一步的工作。冲洗并重复,直到你的工作。如果您在过程中遇到问题,您可以解释您遇到的问题,以a的形式包含您的代码,然后提问。谢谢您的快速回答。我需要一个可能的save呼叫,因为我在上面搜索了几个小时,但没有找到我的问题。这就是我的意图。我是否必须在新帖子中将我的问题发布到脚本中?感谢如果
    for
    循环或类似过程处理整个文件,则第二个问题已过时
    goto start
    使解释器搜索一行
    :start
    ,该行称为标签。我没有使用sed
    ,所以我在回答中避免了它。考虑刷新。
    @echo off
    setlocal
    
    set "target=C:\Users\ebeta\Desktop\work3\data.txt"
    set "pattern=(?sm)^LOAD .+?;"
    
    powershell -noprofile -command^
     "$content = get-content -path '%target%' -raw;"^
     "$content = $content -replace '(?m)\s+$','';"^
     "$load = select-string '%pattern%' -input $content -allmatches;"^
     "if ($load.matches.count -eq 0) {exit 1};"^
     "set-content -path '%target%' -value $load.matches -force"
    
    if errorlevel 1 (
        >&2 echo No replacements occurred.
        exit /b 1
    )
    
    "if ($load.matches.count -eq 0) {exit 1};"^