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

[文件操作] 批处理如何求文本行最大的字节数?

文本a.txt内有很多行字符,字符也有单字节、双字节的。


a.txt内容
-----------------
电A123
B-2235

产品R3398
-------------------
怎样用批处理 计算行的最大字节数 并显示最大字节数
谢谢

本帖最后由 CrLf 于 2012-10-5 16:27 编辑

切换代码页(比如 chcp 437)后用二分回溯法取长度,或写入文件后判断文件字节数,再或者用 sort /rec 二分法判断最长行字数后用 findstr 取得

TOP

判断文件大小的方案:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3. set "str=%%a"
  4. setlocal enabledelayedexpansion
  5. echo !str!>tmp
  6. for %%z in (tmp) do set z=%%~zz
  7. for /f "tokens=1,2" %%b in ("!z! !max!") do (
  8. endlocal
  9. if %%b gtr %%c (
  10. set max=%%b
  11. set "long=%%a"
  12. )
  13. )
  14. )
  15. set /a max-=2
  16. echo !max!
  17. echo !long!
  18. pause
复制代码

TOP

本帖最后由 apang 于 2012-10-6 22:15 编辑

vbs正则应该也可以吧
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. Max = 0
  4. Do Until File.AtEndOfStream
  5.    strLine = File.ReadLine
  6.    Set Re = New RegExp
  7.    Re.Pattern="[^\x00-\xff]"
  8.    Re.Global=true
  9.    strRe = Re.Replace(strLine,"aa")
  10.    If Len(strRe) > Max Then Max = Len(strRe)
  11. Loop
  12. MsgBox "最大字节数:" & Max
复制代码

TOP

差点忘了还有 findstr /o,几乎没有使用过...
如果不需要考虑兼容特殊字符 ! 的话还是比较容易实现的:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('cmd /c "type a.txt&echo.&echo."^|findstr /o .*') do (
  3. set /a len=%%a-offset-2
  4. if !len! gtr !max! (
  5. set "max=!len!"
  6. set "long=!last!"
  7. )
  8. set last=%%b
  9. set offset=%%a
  10. )
  11. echo %max%
  12. echo %long%
  13. pause
复制代码
当然还是没有文件大小来得方便,下面是不考虑 ! 的文件大小方案:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.         echo;%%a>tmp
  4.         for %%z in (tmp) do (
  5.                 if %%~zz gtr !max! (
  6.                         set max=%%~zz
  7.                         set "long=%%a"
  8.                 )
  9.         )
  10. )
  11. set /a max-=2
  12. echo !max!
  13. echo !long!
  14. pause
复制代码

TOP

findstr /o 最好用

谢谢

TOP

返回列表