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

回复 41楼 的帖子

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

TOP

回复 43楼 的帖子

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

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

0:bathome
10:

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

TOP

回复 45楼 的帖子

我找了一下,原来是新手区的  [ 新手练习 4 ] 批处理计算字符串长度

http://www.bathome.net/viewthrea ... A4%B6%C8&page=1

其中4楼的代码中的法四:
  1. rem ----------[法四]主程序开始---------------------
  2. echo %var%>a.txt
  3. echo.>>a.txt
  4. for /f "tokens=1 delims=:" %%i in ('findstr /o .* a.txt') do set /a length=%%i-2&if not %%i  
  5. equ 0 echo 共有%length%个字符&goto end
  6. :end
  7. del a.txt
  8. rem ----------[法四]主程序结束---------------------
复制代码
这段代码中就是用减2。

而且你在14楼说是减2就是减去回车和换行。
(*^_^*)

TOP

回复 47楼 的帖子

非常感谢batcher,这么有耐心回答我的疑问,但是我还是没明白它跟输入到文件,再读出来的时候,为什么不一样?
(*^_^*)

TOP

回复 3楼 的帖子

可以不用第三行代码
  1. for /f "tokens=*" %%a in ('dir x.x /-c ^|find " 字节" ^|find /v ":"') do (
复制代码
中的
  1. ^|find /v ":"
复制代码


不知道这句有什么作用?

修改楼主代码:
  1. @echo off
  2. echo i like the bathome,because here is the batch of the world.>x.x
  3. for /f "tokens=*" %%i in ('dir x.x /-c^|find " 字节"') do (
  4.     for /f "tokens=3" %%j in ('echo %%i') do (
  5.         set /a len=%%j-2&call,echo %%len%%&del x.x /q
  6. ))&pause
复制代码


请指正!

[ 本帖最后由 keen 于 2009-5-11 23:11 编辑 ]
(*^_^*)

TOP

1.1
既然楼主说没有超过80个字符,所以:
  1. @echo off
  2. set "str=i like the bathome,because here is the batch of the world."
  3. for /l %%i in (0 1 80) do (
  4.     call,set var=%%str:~%%i,1%%
  5.     if not defined var set n=%%i&goto end
  6. )
  7. :end
  8. echo %n%&pause
复制代码

[ 本帖最后由 keen 于 2009-5-11 23:40 编辑 ]
(*^_^*)

TOP

回复 60楼 的帖子

58楼的代码是修正楼主3楼的代码,不是我自己写的。

59楼的代码,你说的对,我多用了一个 set /a n+=1 做计数器,多此一举了。谢谢指正,在59楼修正。
(*^_^*)

TOP

返回列表