[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. :StrLen
  2. setlocal enableextensions
  3. set "str=a%~2"
  4. set "str=%str:"=s%"
  5. set "str=%str:^^=s%"
  6. set "str=!str:%%=s!"
  7. set /a strlength=0
  8. :StrLen_1
  9. set /a strlength+=1
  10. if not "!str:~%strlength%,1!"=="" goto StrLen_1
  11. endlocal&set /a "%~1=%strlength%-1"
  12. goto :EOF
复制代码


如果作为库函数的话,我觉得LS的代码不行,因为你不知道变量可能的长度,就把for设定在10000了,缺乏通用性

如果要完全通用的话,就要把10000改成2^31-1,就是2147483647

改完之后,执行时间就增长了。。。

TOP

RE:  defanive兄
我前面这样处理 是因为 变量的的长度是有限制的  这个以前有讨论
执行时间  视变量长度  不是一直循环的 空值就退出啊
下面的代码  前面贴有的  我只是简化下  应该也可判断
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p str=Type :
  3. :lp
  4. if defined str (
  5.     set/a n+=1
  6.     set str=!str:~1!
  7.     goto lp
  8. )
  9. echo %n%
  10. pause
复制代码
1

评分人数

TOP

27楼代码 是否可简化下?
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p str=Type :
  3. :lp
  4. if not "!str:~%n%,1!"=="" set /a n+=1&goto lp
  5. echo;%n%
  6. pause
复制代码

TOP

:StrLen
setlocal enableextensions
set "str=%~2"
:StrLen_1
if defined str (
        set/a n+=1
        set "str=%str:~1%"
        goto StrLen_1
)
endlocal&set "%~1=%n%"
goto :EOF

函数整理成这样了,同意么?

TOP

回复 33楼 的帖子

defan是想用函数的形式做这个东西

标签是 :StrLen
用类似 call :StrLen "var" "字符串" 的形式调用
var是用来返回 字符串长度 的变量名

我小改一下就又出现麻烦了 还请 terse 指教一二。

TOP

1-1
  1. @echo off
  2. set "a= i like the bathome,because here is the batch of the world."
  3. set /a num=0
  4. :loop
  5. set /a num+=1
  6. set a=%a:~1%
  7. if "%a%"=="" (goto :ne1) else goto :loop
  8. :ne1
  9. echo %num%
  10. pause
复制代码

TOP

回复 34楼 的帖子

不能支持特殊字符的话,叫做函数是否不太好呢?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

看不懂哦,那个什么~:什么什么的,在那有详细的介绍。先谢谢了

TOP

回复 38楼 的帖子

本论坛教学区搜索“set”
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2008-8-15 08:39 发表
1.1@echo off
set str=i like the bathome,because here is the batch of the world.
for /f "skip=1 delims=:" %%a in ('^(echo "%str%"^&echo.^)^|findstr /o ".*"') do set /a length=%%a-5
echo %length%


我不是很明白 set /a length=%%a-5,为什么减5,我见过减2的。能给解释一下吗?
(*^_^*)

TOP

回复 40楼 的帖子

你能先解释一下为什么减2吗?
然后我再说说减5的原因。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 41楼 的帖子

减2,是因为减去回车和换行
(*^_^*)

TOP

回复 42楼 的帖子

开始
运行
cmd
分别运行下面两个命令
(echo "bathome"&echo.)|findstr /o ".*"
(echo bathome&echo.)|findstr /o ".*"
思考一下为什么减5?思考一下为什么减2是错的?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 43楼 的帖子

我的意思不是说在这道题中减2,我只是在别的代码中见过减2的,这里减5是对的,我只是很不明白这个原理。

我把你说的这两个代码实验了
(echo "bathome"&echo.)|findstr /o ".*"
(echo bathome&echo.)|findstr /o ".*"
实验结果是:
0:"bathome"
12:

0:bathome
10:

我还是没明白什么原理。我只是发现你给的两种代码因为有 ""  号,而两个值不同了。
(*^_^*)

TOP

回复 44楼 的帖子

能把你看到的减2的代码贴出来看看么,最好能够注明出处?然后我告诉你我的代码中减5的原理。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表