我需要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作为工作。