[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 zm900612 于 2011-6-26 11:48 编辑

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

TOP

返回列表