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

[文本处理] [分享]批处理用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
复制代码
效果:
我已经对自己无语了……
应该比随风的折半法简洁吧~
最让我大跌眼镜的是支持特殊符号!
自我欣赏中……

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

http://www.bathome.net/thread-1480-2-1.html
30楼 terse的

TOP

额……
我不是抄的啊

TOP

不知道为什么,我弄了一大串的a,粘贴上去后,,我测试最多只显示1021,再打开,粘贴,想手动多输入几个字符时无法输入了,最多也还是1021
努力学习,努力挣分

TOP

输入数量有限,楼下的大侠解释。字符串长度请搜索论坛,前阵子我还放了一个呢

TOP

无语~~~"自我欣赏中"
还真自我
还有比你更好的写法,(同是条件字数不超过变量数)

TOP

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

: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 编辑 ]

TOP

回复 7楼 的帖子

是set "s=%1"
懂了吗?

TOP

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

TOP

返回列表