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

回复 20楼 的帖子

计算字节数方法较多。我的是计算字符个数。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

re  13L
是的 a v v 变量字符不能有重复。但是全半角字符都可以,只要不重复任意使用。
此法在计算 子串 在 字符串 中的位置很实用。

re 19L
用到临时文件的话这样最简单(按字节计算的):
set str=任意字符串。
set /p=!str!<nul>len.temp
for %%a in (len.temp) do (echo !str! 长度为:%%~za)
del/q len.temp

TOP

回复 15楼 的帖子

其实不用临时文件的话,效率也不是很低,而且更简洁一些。
  1. @echo off
  2. set "str=例如:Hello, bat! %%<^_^>%%""
  3. setlocal enabledelayedexpansion
  4. set str2=!str:y=-!
  5. set str2=!str2:n=-!
  6. set str2=!str2:a=-!
  7. for /f %%a in ('
  8.     set str2^|xcopy /-y %SystemRoot%\notepad.exe %SystemRoot%\explorer.exe ^| find /i /c "%SystemRoot%\explorer.exe"
  9. ') do set /a strlen=%%a-9
  10. echo;!str!&echo/&echo 上面的字符串长度为:!strlen!
  11. pause
复制代码
1

评分人数

    • CrLf: 思路很有趣,但是优势似乎不大技术 + 1
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 16楼 的帖子

原来是“在只运行一次set的情况下”啊,呵呵,了解了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

找到了
523066680 在顶楼给出的9位的算法
http://www.bathome.net/viewthrea ... hlight=%D7%D6%B7%FB

15楼 tireless兄将其扩展到了15位
http://www.bathome.net/viewthrea ... =%A1%BE%C1%B7%CF%B0
技术问题请到论坛发帖求助!

TOP

回复 14楼 的帖子

链接一时找不到了,但还记得代码,是技术组的一位成员发的,在只运行一次set的情况下,最高只能判断15位字符。

:
  1. @echo off
  2. set "var=12345678"
  3. set "str=%var%fedcba9876543210"
  4. set /a max=0x%str:~15,1%
  5. echo %var%  有 %max% 位
  6. pause
复制代码

[ 本帖最后由 随风 于 2009-6-2 18:12 编辑 ]
技术问题请到论坛发帖求助!

TOP

什么时候出了这么一个好帖?竟然没注意到。

计算字符串长度,利用临时文件和xcopy,也有一个不错的办法
  1. @echo off
  2. set "str=Hello, bat! %%<^_^>%%""
  3. setlocal enabledelayedexpansion
  4. set str2=!str:y=-!
  5. set str2=!str2:n=-!
  6. set str2=!str2:a=-!
  7. echo;!str2!n>str.tmp
  8. goto:next 用for解析命令输出会降低效率,干脆用临时文件
  9. for /f %%a in ('
  10.     xcopy /-y %SystemRoot%\notepad.exe %SystemRoot%\explorer.exe ^<str.tmp ^| find /i /c "%SystemRoot%\explorer.exe"
  11. ') do set strlen=%%a-1
  12. :next
  13. xcopy /-y %SystemRoot%\notepad.exe %SystemRoot%\explorer.exe <str.tmp | find /i /c "%SystemRoot%\explorer.exe" > strlen.tmp
  14. set /p strlen=<strlen.tmp
  15. set /a strlen-=1
  16. echo;!str!&echo/&echo 上面的字符串长度为:!strlen!
  17. del str.tmp strlen.tmp
  18. pause
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 13楼 的帖子

“15 位的限制”是指什么?能否给个链接让我学习下?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

re 12 楼
效率确实高,打破了以前讨论过的 15 位的限制,但应该还有前提,就是 avv 的值不能有重复的吧?
技术问题请到论坛发帖求助!

TOP

在批处理程序设计中,取字符长度最高效的方法

在批处理程序设计中,取字符长度最高效的方法
  1. @echo off&setlocal enabledelayedexpansion
  2. set aav=abcdefghijklmnopqrstuvwxyz不够的话文字也可以abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. set 最大长度=80
  4. for /l %%a in (0,1,%最大长度%) do (
  5. set len!aav:~%%a,1!=%%a
  6. set vva=!aav:~%%a,1!!vva!
  7. )
  8. ::前面初始定义一次,后面可以任意使用,只要两个set 就可以取得字符串长度。
  9. ::但前提是,你要知道需计算的字符串中,最长字符串的长度。
  10. ::效率可想而知了!
  11. set str1=12345678
  12. set str2=abcdefghijklmn
  13. set var1=!str1!!vva!
  14. set var2=!str2!!vva!
  15. set/a var1=len!var1:~%最大长度%,1!,var2=len!var2:~%最大长度%,1!
  16. echo !str1! 长度为:!var1!
  17. echo !str2! 长度为:!var2!
  18. pause
复制代码
2

评分人数

TOP

re 楼上

确实写错,已经在一楼更正.
谢谢指正。

TOP

::号
其实并非这样,在运行过程中,系统遇到时相当于处理标号一样的时间:0.05毫秒,
Rem
按道理没有进行作何操作,应该不耗时才对,可是并非如此,单独一行rem要用0.019毫秒,
可见它没有 ::注释高效

这句是不是写错了?
.
Call :sub   1.28毫秒
Call abc.bat  3.51毫秒
出人意料!怎么外部调用会比内部调用更高效呢???

还有这句,也写反了吧?
.
Call :abc.bat      1.28毫秒  (空操作)

还有这句是不是多了个冒号?
技术问题请到论坛发帖求助!

TOP

不知是否和点表示路径有关?
猜想。。。。。
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2009-5-11 00:22 发表
又一发现分别对 ehco. 和 echo/ 、echo\ 、echo= 、作了测试,发现除了点以外,其余的耗时都和echo 加 空格一样。看来以后要改掉用 echo点的习惯才行了。
:loop2
echo=a>nul
echo=a>nul
echo=a>nul
echo=a>nul ...

原来只有点号才会这样呀,我还以为是显示一行多用的时间呢,
这点我倒没有发现!


测试了一下,用echo=dd和echo,dd及echo;dd这三个用时最少为:   0.28毫秒

[ 本帖最后由 netbenton 于 2009-5-11 00:39 编辑 ]
1

评分人数

    • tireless: =,;确实好。http://www.bathome.cn/thread- ...PB + 1

TOP

又一发现分别对 ehco. 和 echo/ 、echo\ 、echo= 、作了测试,发现除了点以外,其余的耗时都和echo 加 空格一样。看来以后要改掉用 echo点的习惯才行了。
:loop2
echo=a>nul
echo=a>nul
echo=a>nul
echo=a>nul
echo=a>nul
set /a n+=1
if !n! lss 1000 goto loop2

echo点 耗时 23秒,而其它的 5-6秒。。
1

评分人数

技术问题请到论坛发帖求助!

TOP

返回列表