将当前文件夹内所有txt文本的第2行的666替换为888
问题的关键在于如何忽略文本的头2行。
对超大文件来说 for 太慢。
more 也不快,且无法处理超过 65535 行的文本。(呵,不知是否我不会用?)
如果规定只能用cmd命令的话就只有 findstr 是最佳选择了。
测试环境及效果:
处理 20 个文本文件,每个文件 42万行,大小 12M
耗时:0 小时 1 分钟 3 秒 82 毫秒
测试环境:cup 1.0 内存:128M 系统:xp@cmd
要求:文本内容不能有 以5个 ##### 开头的行,(若有、可自行修改 set "var=#####")
::- @echo off&md tmp
- set "var=#####"
- set "find1=(set/p=%var%<nul&findstr ".*" "%%a")"
- set "find2=(set/p=%var%<nul&findstr /vb "%var%")"
- for /f "delims=" %%a in ('dir/b/a-d *.txt') do (
- call :loop "%%a" "tmp\%%~na_888%%~xa"
- (%find1%|%find2%|findstr /vb "%var%")>>"tmp\%%~na_888%%~xa"
- )
- start tmp
- exit
- :loop
- set /p n1=<"%~1"
- >"%~2" echo.%n1%
- for /f "usebackq skip=1 delims=" %%a in ("%~1") do (
- set "n2=%%a"
- >>"%~2" call echo.%%n2:666=888%%
- goto :EOF
- )
- goto :EOF
复制代码
|