使用批处理脚本从文本文件中删除多行字符串

2024-01-30

我正在尝试创建一个批处理文件,该文件将编辑文本文件以删除包含特定字符串的行and之后直接删除该行。 该文件的示例如下所示:



LINE ENTRY KEEP_1 BLA BLA
END
LINE ENTRY REMOVE_1 FOO BAR
END
LINE ENTRY REMOVE_2 HELLO WORLD
END
LINE ENTRY KEEP_2 CAT DOG
END
  

运行批处理脚本后,我需要新文件包含



LINE ENTRY KEEP_1 BLA BLA
END
LINE ENTRY KEEP_2 CAT DOG
END
  

其中包含 REMOVE_ 的任何行以及相应的“END”行均已被删除。

我尝试过使用发现的技术here https://stackoverflow.com/questions/418916/delete-certain-lines-in-a-txt-file-via-a-batch-file删除包含该字符串的行,但似乎不可能包含 \r\n 等字符来检查并在搜索中包含“END”。我不能将其作为 2 个单独的 FINDSTR 命令来执行,因为我仍然需要为其他两个条目保留“END”文本。
Using findstr /v REMOVE_留给我以下内容:



LINE ENTRY KEEP_1 BLA BLA
END
END
END
LINE ENTRY KEEP_2 CAT DOG
END
  

并使用findstr /v "REMOVE_*\r\nEnd"似乎根本不起作用。 只是为了确认每行肯定终止于\r\n.

任何有关此问题的帮助将不胜感激。


以下批处理脚本应该执行您想要的操作:

@echo off
setlocal enabledelayedexpansion

set /A REMOVE_COUNT=1

if "%~2"=="" (
    echo Usage: %~n0 search_str file
    echo remove lines that contain a search_str and remove %REMOVE_COUNT% line^(s^) directly after that
    exit /b 1
)

set "SEARCH_STR=%~1"
set "SRC_FILE=%~2"

set /A SKIP_COUNT=0
for /F "skip=2 delims=[] tokens=1,*" %%I in ('find /v /n "" "%SRC_FILE%"') do (
    if !SKIP_COUNT! EQU 0 (
        set SRC_LINE=%%J
        if defined SRC_LINE (
            if "!SRC_LINE:%SEARCH_STR%=!" == "!SRC_LINE!" (
                echo.!SRC_LINE!
            ) else (
                set /A SKIP_COUNT=%REMOVE_COUNT%
            )
        ) else (
            rem SRC_LINE is empty
            echo.
        )
    ) else (
        set /A SKIP_COUNT-=1
    )
)

匹配行后要删除的行数可以通过设置来配置REMOVE_COUNT多变的。

该脚本还通过使用一个技巧来正确处理带有空行的文件:find 命令用于为所有行添加行号前缀。这样 for 命令就不会跳过空行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用批处理脚本从文本文件中删除多行字符串 的相关文章

  • 确定用于映射网络驱动器的域和用户名

    使用带有 SP1 的 Windows 7 Enterprise 但我希望得到适用于 Windows XP 2003 2008 Vista 7 的通用答案 从命令提示符处 我执行net use命令将 Z 驱动器映射到另一台计算机上的共享 但我
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 用于验证 IIS 设置的 Powershell 脚本

    是否可以使用 Power Shell 脚本获取 IIS 设置 我希望使用脚本获取 检查以下信息 检查 Windows 身份验证提供程序是否正确列出 协商 NTLM 检查是否启用了 Windows 身份验证 Windows 身份验证高级设置
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 取消后调用 boost::asio 异步处理程序没有错误

    我的代码在单个线程中使用 boost asio 和 io service 来执行各种套接字操作 所有操作都是异步的 每个处理程序都依赖于boost system error code 特别boost asio error operation
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何修复:“无法解析类型 java.lang.CharSequence。它是从所需的 .class 文件间接引用的”消息? [复制]

    这个问题在这里已经有答案了 我正在尝试使用这个字符串 amountStr amountStr replace replace replace 但我收到一条错误消息 我知道我收到的错误消息是因为我刚刚发布的字符串已过时 所以我想知道该字符串的
  • Mockito:匹配除一个之外的任何字符串[重复]

    这个问题在这里已经有答案了 如何使用 Mockito 编写匹配器来匹配除特定字符串之外的任何字符串 我尝试使用一些 hamcrest 匹配器来否定和组合其他匹配器 但是 hamcrest 匹配器都返回类型的值Matcher
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 如何在 python 3.x 中使用 string.replace()

    The string replace 在 python 3 x 上已弃用 这样做的新方法是什么 与 2 x 一样 使用str replace https docs python org library stdtypes html str r
  • 如何消除字符串中的所有换行符?

    我需要删除字符串中出现的所有换行符 来自数据库 我使用下面的代码来做到这一点 value Replace r n Replace n Replace r 我可以看到至少有一个角色的行为就像行尾一样幸存了下来 字符代码是8232 http w
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 以编程方式将字符串宽度值插入到 sprintf() 中

    我正在尝试以编程方式将字符串宽度值插入到sprintf 格式 期望的结果是 sprintf 20s hello 1 hello 但我想插入20在同一通话中即时进行 因此它可以是任何号码 我努力了 sprintf ds 20 hello 1
  • 从字符串末尾删除多个字符类型

    我有一个构建地址字段的循环 其中一些字段在字符串末尾可能为空 List
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔

随机推荐

  • 数据结构的功能类似于 C 或 C++ 中的数据库

    是否有一种数据结构可以提供数据库的功能 如插入 更新 删除等 例如 创建一个类似于数据库表的结构 在其上存储数据并对其进行查询 有选择地删除它 我知道使用哈希表可以做到这一点 例如 uthash 库 但据我所知 在哈希表中仅更新一个列元素并
  • eclipse 不适用于 ubuntu 16.04

    我刚刚安装了ubuntu 16 04并下载了eclipse并解压 当我启动 Eclipse 时 欢迎页面是空的 当我启动 eclipse 市场时 什么也没有发生 如何解决这个问题 编辑完后尝试启动 Eclipseeclipse ini文件并
  • IE10 SCRIPT5009:“__doPostBack”未定义

    我在使用 ASP NET 控件的 IE10 上遇到问题 需要 JavaScript 回发 例如链接按钮 它可以在 IE9 版本以及 IE10 兼容模式下正常工作 但在 IE10 标准模式下 出现以下错误 SCRIPT5009 doPostB
  • 使用 gradle 脚本结帐

    我是 gradle 新手 我想使用 gradle 脚本签出远程存储库 可以运行 shell 命令 Inside gradle 任务来使用日期时间戳 shell 命令克隆远程存储库 是的 您可以使用 gradle Exec 类型任务在 OS
  • PHP 中的 preg_replace - NOT 条件的正则表达式

    我正在尝试使用 preg replace 在 PHP 中编写一个函数 它将替换列表中未找到的所有字符 通常我们会替换它们所在的位置 但这个不同 例如 如果我有字符串 mystring ab2c4d 我可以编写以下函数 将所有数字替换为 pr
  • 从 Mysql 导出 CSV

    我在导出使用 php 从我的 mysql 表之一创建的 csv 文件时遇到了一些麻烦 我使用的代码打印了正确的数据 但我看不到如何在 csv 文件中下载这些数据 而是提供了创建的文件的下载链接 我以为浏览器应该自动提供文件供下载 但事实并非
  • Java:如何检查数组中的元素是否已初始化?

    我想检查数组中的某个元素是否已初始化 我该怎么做 创建数组时 数组中的所有值都会被初始化 初始值可以明确设置 例如X xs x1 xN 或者在实例化数组时分配默认值 对于对象数组 每个元素的默认值是null for a boolean数组
  • 在 Windows Phone 7 上录制扬声器

    您知道是否可以拦截 win Phone 7 上的音频流并记录扬声器上正在播放的内容 或者 我使用 MediaElement 有没有办法获取当前流 我想在达到特定频率时添加一些动画 thanks 只要您知道该媒体的位置并可以启动下载 您就可以
  • Simple_form 必填字段不起作用 - Ruby on Rails

    我在 RoR 应用程序中有一个使用 simple form 构建的提交表单 当字段为空时 应用程序仍会进入下一步 不会提示错误或警告 这些字段应该是默认的required true 但即使手动编写也不起作用 该应用程序有 3 个步骤 New
  • 创建交换链失败

    我正在关注 DX 示例和 MSDN 参考 但现在遇到了困难 我从 D3D11CreateDeviceAndSwapChain 获取 E InvalidArg 的 HRESULT 我知道它是我传递的 IDXGIAdapter 因为如果我将其更
  • Gradle war 清单版本号对于发布版本错误

    我有一个构建 war 文件的 gradle 项目 并包含一个清单 war archiveName archive war manifest attributes Implementation Title project name Imple
  • 无法从 Matplotlib 轴中删除流图箭头

    我怎样才能删除一个流线图 https matplotlib org 3 2 1 api as gen matplotlib pyplot streamplot html来自 Matplotlib 绘图而不清除所有内容 i e 不使用plt
  • LInq 排序依据和排序依据描述

    我正在使用 Linq 来过滤对象列表并对它们进行排序 例如 myList Where x gt x Item SF x AdSize minadSize OrderBy x gt x ManufacturingDate OrderBy x
  • MGTwitterEngine 和 iPhone

    我下载了 MGTwitterEngine 并添加到我的 iPhone 项目中 它正在连接并获取雕像 我可以通过将它们转储到 NSLog 中来判断它们 但是 我不知道如何解析这些调用 以便将它们添加到表中 它们以 NSString 形式返回
  • Grails 应用程序的种子数据

    将种子 初始或测试 数据加载到 grails 应用程序中的最佳方法是什么 我正在考虑 3 个选择 将所有内容放入 BootStrap groovy 文件中 如果领域类和测试数据很多 这会很乏味 编写自定义功能以通过 xml 加载它 借助 g
  • 从小书签加载模式窗口(如亚马逊愿望清单小书签)

    我正在使用一个书签来加载一个 html 页面 一切都很好 但是 由于浏览器的外观通常很丑陋 所以看起来不太热 有没有办法完全无框架加载页面 就像它的 jquery 模态版本一样 我认为它不可能在页面内实现 可以说是覆盖自身 有没有办法可以在
  • 如何从根网站及其所有子网站循环访问

    我遇到了一个需要解决的问题 我想循环访问根网站及其所有子网站 并希望设置一些属性 using System using System Collections Generic using System Linq using System Te
  • 如何将 Swift 对象转换为字典

    我对 iOS 编程还比较陌生 然而 我认为 Swift 会有一种自动方式将对象转换为 JSON 反之亦然 话虽这么说 我已经找到了几个可以做到这一点的库 然而 似乎无论您如何将数据发布到 Web 服务 甚至使用 AlamoFire 之类的东
  • java.lang.InternalError:名称太长而无法表示

    我收到此错误 java lang InternalError name is too long to represent at java lang ClassLoader defineClass1 Native Method at java
  • 使用批处理脚本从文本文件中删除多行字符串

    我正在尝试创建一个批处理文件 该文件将编辑文本文件以删除包含特定字符串的行and之后直接删除该行 该文件的示例如下所示 LINE ENTRY KEEP 1 BLA BLA END LINE ENTRY REMOVE 1 FOO BAR EN