【问题标题】:use find/replace with formula使用公式查找/替换
【发布时间】:2014-10-27 13:17:36
【问题描述】:

这很可能是一个非常简单的问题,但在这里。

我需要在文件中搜索特定顺序的数字,然后将每个数字加 5/ 例如:

time hr:1,st:2,ps:10(这是我要寻找的 - 整个文件中会有各种其他数字)

我想用 +5 代替数字

时间 hr:6,st:7,ps:15

【问题讨论】:

    标签: batch-file replace find formula


    【解决方案1】:

    批处理不是文本处理的最佳选择,尤其是像您的要求这样复杂的处理。使用 JScript、VBScript 或 powershell 可以更简单地完成它。但是批处理是可能的...

    没有任何简单的批处理命令可以做你想做的事。您将必须编写自己的代码来读取每一行,如果它与格式不匹配,则将其原封不动地写出来。如果确实匹配格式,则解析该行以提取数字,使用 SET /A 递增它们,然后写出新行。

    您不能直接修改文件。相反,您必须写入临时文件。完成后,将临时文件移动到原始名称。

    我会假设感兴趣的格式化文本没有嵌入更大的行中。

    您没有说明文件中的其他内容。空行和感叹号可能会导致问题。我假设它们可能存在,因此代码比不存在时所需的复杂得多。

    我通过使用 FINDSTR /N 为每一行插入一个行号前缀来保护空行。在将行写入新文件之前,必须删除此前缀。

    感叹号通过在循环内打开和关闭延迟扩展来保护。如果在扩展 FOR 变量时启用了延迟扩展,则如果包含感叹号,则该值将被破坏。

    @echo off
    setlocal disableDelayedExpansion
    >"yourFile.txt.new" (
      for /f "delims=" %%L in ('findstr /n "^" "yourFile.txt"') do (
        for /f "delims=:, tokens=1-7*" %%A in ("%%L") do (
          if "%%B %%D %%F%%H" equ "time hr st ps" (
            set /a "hr=%%C+5, st=%%E+5, ps=%%G+5"
            setlocal enableDelayedExpansion
            echo time hr:!hr!,st:!st!,ps:!ps!
            endlocal
          ) else (
            set "ln=%%L"
            setlocal enableDelayedExpansion
            echo(!ln:*:=!
            endlocal
          )
        )
      )
    )
    ::move /y "yourFile.txt.new" "yourFile.txt" >nul
    type yourFile.txt.new
    

    【讨论】:

    • 好的,谢谢,我会玩的。
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多