Board logo

标题: [文本处理] [分享]批处理用for判断变量里有多少个字 [打印本页]

作者: zcydez    时间: 2010-8-23 12:50     标题: [分享]批处理用for判断变量里有多少个字

最近小弟要弄一个判断变量字数的批处理(实现自动化)结果灵感接踵而至,所以有了以下代码:
  1. @echo off
  2. set /p w=请输入一些文字:
  3. setlocal EnableDelayedExpansion
  4. for /l %%b in (0 1 8192) do (
  5. if "!w:~%%b,1!"=="" (echo 你输入了%%b个字!&goto a))
  6. :a
  7. pause
复制代码
效果:
我已经对自己无语了……
应该比随风的折半法简洁吧~
最让我大跌眼镜的是支持特殊符号!
自我欣赏中……
作者: 523066680    时间: 2010-8-23 14:22

=.= 有人路过这个方法好像……
在考虑未知字符串长度的情况以及效率的情况越想越远然后~

http://www.bathome.net/thread-1480-2-1.html
30楼 terse的
作者: zcydez    时间: 2010-8-23 14:38

额……
我不是抄的啊
作者: sgaizxt001    时间: 2010-8-23 22:45

不知道为什么,我弄了一大串的a,粘贴上去后,,我测试最多只显示1021,再打开,粘贴,想手动多输入几个字符时无法输入了,最多也还是1021
作者: cjiabing    时间: 2010-8-24 00:11

输入数量有限,楼下的大侠解释。字符串长度请搜索论坛,前阵子我还放了一个呢
作者: qq106942397    时间: 2010-8-24 17:55

无语~~~"自我欣赏中"
还真自我
还有比你更好的写法,(同是条件字数不超过变量数)
作者: sleepinglord    时间: 2010-8-27 18:52

马上下班了,我随手写了一个,只是个想法而已,有爱的话,谁给补完吧

:strlen
if "%1" == "" (
  if "%2" == "" (echo 0) else (echo %2)  goto :eof
else (
  if "%2" == "" (
    call :strlen %1 0
    goto :eof)
  else (
   set s = %1                                            //这里要是能不set,直接把传入的参数处理一下再传就更好了!
   set /a n = %2+1
   call :strlen %s:~1% %n%
   goto :eof)
)

其实还有更简单的想法,把%1(字符串)和%2(长度)每次给echo出来,然后用 | 管道到自己,这样应该更方便。不过这样的话strlen就得单独写成一个.bat

[ 本帖最后由 sleepinglord 于 2010-8-27 18:56 编辑 ]
作者: zcydez    时间: 2010-8-27 20:50     标题: 回复 7楼 的帖子

是set "s=%1"
懂了吗?
作者: ZJHJ    时间: 2010-8-27 21:32

改用输入文件的形式,就不是1021了,是8192




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2