返回列表 发帖

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

re 61楼

多了两个吧,是回车和换行符,减2就可以了

TOP

回复 60楼 的帖子

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

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

TOP

rem 1.1 1.2字符串长度不限,可含特殊字符。
@echo off &setlocal enabledelayedexpansion
set /p str=Please input string:&set a=&set /a var=0
:loop
    set a=!str:~%var%,1!
    set /a err=%errorlevel%
    if !err! equ 0 (set /a var+=1&goto :loop )
    set /a var-=1
echo the length of string is:%var%
pause>nulCOPY

[ 本帖最后由 zgq0301 于 2009-11-14 09:07 编辑 ]

TOP

原帖由 netbenton 于 2009-4-29 11:54 发表
楼上的,等半天都算不出来,
其实set /p输入的行最大为1024字符,变量长度也只有8189 个字符,没必要1000000,

for /l 在预处理时会首先按数分配完后才一条条执行的,分配时也是要时间的,大概是80次等一个set a ...

1024?
奇怪了...为何我输入的最大数为1021的?

我是在下面试验得到1021这数字的,是那里的分别影响了结果?
望指教
@echo off
set/p str=
:lp
if defined str set str=%str:~1%&set/a l+=1&goto lp
echo %l%
pause>nul

[ 本帖最后由 Taurus 于 2009-11-14 17:44 编辑 ]
带内地用语或带里语的文章,在下读写总觉有点吃力;
如误解了各位意思的讲勿见怪   ^_^

TOP

TOP

@echo off
setlocal enabledelayedexpansion
set /p a=请输入一窜字符串:
set m=0
:xxw
if not "!a:~%m%,1!"==""  set /a m=!m!+1&goto :xxw
echo%m%个字符!!!!!!!!
pause&goto :eofCOPY

TOP

第一题不计算空格数:
@echo off&SetLocal EnableDelayedExpansion
Set str=i like the bathome,because here is the batch of the world.
Set n=0
Set str=%str: =%
Set a=
:loop
Set a=!str:~%n%,1!
if not "%a%"=="" (Set /a n+=1 & goto loop
) Else (echo !n!)
pause>nulCOPY

TOP

回复 3# 523066680
为什么要在原字节大小上减去2?难道默认字符还要多占去2个字节?

TOP

回复 69# Hello123World


    因为回车换行占两个字符
1

评分人数

TOP

(echo TestStr&echo.)|findstr /o ".*">a.txtCOPY
打开回显,一目了然。这句中之所以多出来一个空格,原因是预处理时语句被重组成“规范”的格式:
(echo TestStr  & echo.)  | findstr /o ".*"COPY
做了如下一组实验:
rem>nul 3>test.txt
echo TestStr
echo TestStr&echo.
(echo TestStr&echo.)
(echo TestStr&echo.)|findstr /o ".*"
test.txtCOPY
可见 echo TestStr 时,cmd 为其后缀一个仅在预处理中有效的空格,而 & 号又为自身前后添加一个空格。当管道中出现语块或者存在内部命令时,管道前的内容将作为参数交给新的 cmd 进程,此时原本只存在于预处理中的空格也许因为被新的 cmd 进程误认为是 echo 命令的参数而非分隔符显示出来。

TOP

回复 70# CrLf
可是那个字符串哪里回车换行了,哦,预处理默认echo后回车换行。

TOP

这一道题目牵出很多故事,太精彩了,真是受益匪浅。

TOP

习题1.2中,如果字符串中加一个单%,有些代码就可能失效。

TOP

:%%a%%!ver!&^^^ ^*~                     are you o                 k ?" : \  / ` `  verfdxcweippo opj x ds gw !%%
::将字符串放于第一行,并加上:
@echo off & setlocal EnableDelayedExpansion
set /p str=<%0
:count
set str=!str:~1!
if defined str ( set /a n+=1 & goto :count )
echo %n%COPY

TOP

返回列表