本帖最后由 zm900612 于 2011-6-26 11:48 编辑
适合处理大文件,但是考虑到效率,将支持的最长行字符长度上限定为4196或者8189,以避开for遍历,不过若不遍历,也就无法支持宽字符了:- @echo off&setlocal enabledelayedexpansion
- set f=....
- for /l %%a in (0 1 9) do set f=!f!!f!
- set f=!f!!f:~-4093!
- ::创建一个长度为8189的变量f,日后作为文件名以及findstr通配符出现
-
- copy 1.txt !f:~-125!.$
- findstr .* *.$>$
- ::sort /rec开关至少要128个字符才起效的限制,所以为1.txt中的内容凑够128个字符的前缀
-
- set n=8192
- for %%a in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- sort /rec !n! $&&set /a n-=%%a||set /a n+=%%a
- )>nul 2>nul
- set /a n=n-128
- ::判断最长行字符数
-
- findstr /x "!f:~-%n%!" 1.txt
- ::查找最长行,但是因为findstr匹配的是字节,所以碰到存在宽字符的文件,还是老老实实遍历吧
-
- del *.$
- pause
复制代码
|