[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
1.1
  1. @echo off
  2. set str=i like the bathome,because here is the batch of the world.
  3. for /f "skip=1 delims=:" %%a in ('^(echo "%str%"^&echo.^)^|findstr /o ".*"') do set /a length=%%a-5
  4. echo %length%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

1.1
  1. @echo off
  2. echo "i like the bathome,because here is the batch of the world.">"%temp%\_strlen.txt"
  3. for %%a in ("%temp%\_strlen.txt") do set length=%%~za
  4. set /a length=length-4
  5. echo %length%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 13楼 的帖子

12楼在第一次set的时候,脱掉了三个百分号。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

13楼的方法不错,我也这样写过,但缺点在于很难作为一个函数或者模块放到一个大的批处理里面,缺乏实用性,不知道 shqf 兄有没有好的方法?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 22楼 的帖子

这样是不是简单些?
  1. @echo off
  2. set str=i like the bathome,because here is the batch of the world.
  3. set length=0
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (0,1,80) do (
  6.   if "!str:~%%a,1!" neq "" (
  7.     set /a length+=1
  8.   ) else (
  9.     goto :show
  10.   )
  11. )
  12. goto :eof
  13. :show
  14. echo !length!
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 34楼 的帖子

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

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

回复 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

回复 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

回复 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

回复 46楼 的帖子

那个是通过判断文件大小来计算字符串长度的,跟你在40楼提出的问题略有不同。我们还是以你40楼的问题来讨论一下吧。

(echo "bathome"&echo.)|findstr /o ".*"的结果你已经看到了,就是:

0:"bathome"
12:

这个命令用在for里面,得到的效果就是set /a length=12-5,为什么减去5呢?

findstr /o计算的是偏移量,偏移量从零开始,一对双引号+字符串bathome这7个字母+回车+换行,总共11个,下一个偏移量自然是12,因此要想用这个方法得到字符串bathome的长度就需要减去5。

--------------------------------------------

以上为错误言论,请忽略。解释见49楼。


[ 本帖最后由 Batcher 于 2009-4-20 19:17 编辑 ]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 48楼 的帖子

当我们把字符串重定向输出到文件中再计算偏移量的情况,比较好理解,多出来的两个字节就是行尾的回车和换行。

当我们直接在for命令中获取字符串偏移量时,情况会变得稍微复杂。请把一下代码保存为test.bat,然后运行。
  1. (echo BatHome&echo.)|findstr /o ".*"
  2. pause
复制代码
结果如下:
C:\Test>(echo BatHome  & echo.)  | findstr /o ".*"
0:BatHome
10:

请注意,实际运行时,命令行解释器在&符号前面添加了两个空格(通常情况下,命令分隔符是一个空格),这多出来的一个空格就导致了偏移量增加了一个,这就是我们在计算字符串BatHome长度的时候需要减去3的原因。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 53楼 的帖子

行结束符应该是eol而不是eof吧?
不过这个推测似乎缺乏证据的支持。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 55楼 的帖子

  1. (echo TestStr&echo.)|findstr /o ".*">a.txt
复制代码
我们把结果输出到文件里面,可以清楚的看到行尾多出来的那个字符就是一个空格(十六进制编辑器下显示为20)。

[ 本帖最后由 Batcher 于 2009-5-5 13:36 编辑 ]
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 60楼 的帖子

你决定这个能得到正确结果?
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Test>type test.bat
@echo off
echo BatHome>x.x
for %%a in (x.x) do echo %%~za

C:\Test>test.bat
9
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表