找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26251|回复: 6

[文本处理] [已解决]批处理findstr /o为何无法正常显示第一行偏移量?

[复制链接]
发表于 2011-8-8 19:59:02 | 显示全部楼层 |阅读模式
本帖最后由 lfoqtal 于 2011-8-9 08:27 编辑
/O        在每个匹配行前打印字符偏移量。

这句话是findstr的说明
但在实际运行中,我发现它无法正常显示文本的第一行
  1. @echo off
  2. echo 123456|findstr /o "."
  3. echo 123456>1.txt
  4. echo asdafw>>1.txt
  5. echo 45688>>1.txt
  6. findstr /o "." 1.txt
  7. pause
复制代码
可以看到在显示单个变量时,根本无法计算出偏移量,显示0:
而在显示文本时第一行也是为0:,后几行则可以正常显示只是多算了两个数是换行符所占偏移量
为什么会这样呢,
尝试了多次后发现原来是累计偏移量问题啊!
第一行显示的是起头初始值,所以是0
他并不会在最后一行显示所累计的最终值,所以显示文本时少了最后一行的值

所以/o并不是用来计算总字符偏移量的,而是用来计算本行在总文本中是从第几位偏移开始的,所以只显示头不显示尾

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-8 20:39:28 | 显示全部楼层
这个/o在我的理解中是计算本行之前的字符偏移量之和
而在第一行之前是没有字符的,所以才会显示为0
 楼主| 发表于 2011-8-8 21:10:22 | 显示全部楼层
计算单个变量长度的方法
  1. @echo off
  2. :1
  3. set /p p=
  4. for /f "delims=:" %%a in ('(echo.%p%^&echo.1^) ^|findstr /o "."') do set /a a=%%a-3
  5. echo %a%个字符
  6. pause>nul
  7. goto :1
复制代码
但在这里就不明白了.
为什么要-3而不是-2??
发表于 2011-8-8 21:59:17 | 显示全部楼层
正如2L所说
FINDSTR /O 会计算包括它自身产生的字符,并在相应的行首显示出其总和
但不得不说这个参数没用过几回,也不知道对不对
发表于 2011-8-9 00:46:38 | 显示全部楼层
本帖最后由 ArdentMan 于 2011-8-9 00:47 编辑

每一行除了可见字符还有一个回车符和一个换行符

所以计算时要减去它们的偏移量2

因此计算本行的字节数要用下一行的偏移量减本行的偏移量并减2

计算末行的要先人为加上一行才行~~~~
发表于 2011-8-9 01:39:10 | 显示全部楼层
本帖最后由 hanyeguxing 于 2011-8-9 01:41 编辑

回复 3# lfoqtal

计算单个变量长度的方法
  1. @echo off
  2. :1
  3. set /p p=
  4. for /f "delims=:" %%a in ('(echo.%p%^&echo.1^) ^|findstr /o "."') do set /a a=%%a-3
  5. echo %a%个字符
  6. pause>nul
  7. goto :1
复制代码
复制代码但在这里就不明白了.
为什么要-3而不是-2??
lfoqtal 发表于 2011-8-8 21:10

1,/o 统计的是此行之前的偏移和
2,换行、回车也在统计内
3,因为 (echo.%p%&echo.1) | 命令 使得字符串后多了一个空格,所以该减3

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-8-9 08:26:05 | 显示全部楼层
回复 6# hanyeguxing


    原来如此,我都忘了|管道会在句尾加个空格这件事了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:22 , Processed in 0.021314 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表