文件重写:一行大于variables的最大大小。 解决方法?

我需要replace文件中的单行。 通常,这段代码工作正常:

(关于这个块的实际细节并不是这个问题所必需的)。

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,与其他variables一样,最大长度只能保存8,192个字符(感谢dbenham对这个tidbid的使用,现在正在使用)。

那么当行数大于8,192个字符(在这种情况下为23,708)时,我有什么select?

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

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

谢谢。

你可以用纯批量解决这个问题!

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

在此之后,你的行被分解成变量part[1] 。part part[20]

把它写入一个你可以使用的新文件

 :writeLongLine <nul ( for /L %%n in (1 1 19) do set /p ".=!part[%%n]!" (echo !part[20]!) ) > longLine2.tmp 

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

如果你想保持在批处理世界,你可以使用一个方便的混合JScript /批处理实用程序名为REPL.BAT执行正则表达式搜索和替换标准输入,并将结果写入标准输出。 这是相当有效的,并从XP以上的任何Windows机器上工作。 这是纯脚本,所以不需要下载exe文件。 你可以在这里得到REPL.BAT。 完整的文档嵌入在脚本中。

只需使用sed , awk或Perl作为工作。