1

我需要替换文件中的一行。通常,此代码可以正常工作:

(对于这个问题,这个块正在做什么的实际细节不是必需的)。

for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %DATA%') do (
    if %%a equ %TargetLine% (
        echo !insert!>>%filepath%cc.tmp
    ) else (
        if [%%b]==[] (echo.>>%filepath%cc.tmp) else (echo %%b>>%filepath%cc.tmp)
    )
)

不幸的是,每一行都分配给 %%a,与任何其他变量一样,它最多只能存储 8,192 个字符(感谢 dbenham 提供的花絮,现在开始使用)。

那么当行大于 8,192 个字符(在本例中为 23,708 个)时,我有什么选择?

在你问之前:不,它不能被分隔成一个新的行,它是一个用 Base64 编码的 10k JSON 数组,然后写入一个 ByteArray。

我假设要走的路是使用正则表达式,这是正确的假设,还是有另一种解决方法?

谢谢。

4

3 回答 3

2

你可以用纯批处理来解决这个问题!

:readLongLine
< longline.tmp (
    for /L %%n in (1 1 20) do set /p part[%%n]=
)

在此之后,您的行被拆分为变量part[1]..part[20]

将其写入您可以使用的新文件

:writeLongLine
<nul (
    for /L %%n in (1 1 19) do set /p ".=!part[%%n]!"
    (echo !part[20]!)
) > longLine2.tmp
于 2013-08-06T22:05:13.683 回答
1

您可以使用其他一些脚本语言,例如 VBScript、JScript 或 PowerShell。

如果您想留在批处理世界中,您可以使用名为 REPL.BAT 的方便的混合 JScript/批处理实用程序,该实用程序在标准输入上执行正则表达式搜索和替换,并将结果写入标准输出。它非常高效,可以在 XP 以后的任何 Windows 机器上运行。它是纯脚本,因此无需下载 exe。你可以在这里获得 REPL.BAT。完整的文档嵌入在脚本中。

于 2013-08-06T22:02:14.820 回答
-2

只需使用sedawkPerl来完成这项工作。

于 2013-08-06T22:41:49.673 回答