标题: [其他] 解释一下,这个奇怪的批处理 [打印本页]
作者: 封印 时间: 2008-3-4 12:06 标题: 解释一下,这个奇怪的批处理
- @echo off
- :R
- @set,=莪苁來莈絠停祉過想伱 爱你媞莪①亼啲諎
- @for %%a in (%,%)do @set]=%%a
- echo.
- echo.
- @for /l %%b in (0,1,45) do @call set/p= %%]:~%%b,1%%<[email=nul&@ping/n]nul&@ping/n[/email] 1 127.1>nul
- cls
- goto R
复制代码
一个人签名上的批处理,但怎么也看不懂。。。。。。希望高人指点解释一二。。希望能站在菜鸟的思想上解释。。。谢谢哈
**************************************************
版务执行:Batcher
执行时间:2008-08-29
操作内容:加code标签
**************************************************
[ 本帖最后由 Batcher 于 2008-8-29 20:10 编辑 ]
作者: 随风 时间: 2008-3-4 12:31
代码本身并没有什么奇怪的地方,唯一与常规不同的地方是,代码中,用了几个符号作为变量名。
若是还看不懂的话,就得从基本的学起了,关键是for是如何工作的。。。。
解释,并不是理解代码的好方法。何况你若不懂的话,解释了也未必能懂。
而且 顶楼的代码也有错误。
[ 本帖最后由 随风 于 2008-3-4 12:35 编辑 ]
作者: 封印 时间: 2008-3-4 12:51
是呀,那个“set,=莪苁來莈絠停祉過想伱 爱你媞莪①亼啲諎”想不通为什么有个逗号呢???
“@for %%a in (%,%)do @set]=%%a”为什么又有一个“]”
还有前面有@echo off了,后面为什么还要加@呢。。。真的是想不通。。。
作者: 希望的寄托 时间: 2008-3-4 13:22
是不是不显示啊,@是不显示后面的
就是不知道这里是不是这个意思
作者: youxi01 时间: 2008-3-4 13:41
原帖由 封印 于 2008-3-4 12:51 发表
是呀,那个“set,=莪苁來莈絠停祉過想伱 爱你媞莪①亼啲諎”想不通为什么有个逗号呢???
“@for %%a in (%,%)do @set]=%%a”为什么又有一个“]”
还有前面有@echo off了,后面为什么还要加@呢。。。真的是想不通 ...
这里的“,”"["都是变量名
@是多余的!记住,人家写的程序未必就是标准!!
作者: 封印 时间: 2008-3-4 14:37
管理员教训得是......我就去面壁去
作者: 希望的寄托 时间: 2008-3-4 16:29
看是看不明表,管理员,你是从哪里学到这些的啊
作者: novaa 时间: 2008-3-4 21:40
大家自己写代码的时候经常会出错,或看不懂别人写的代码,这个时候新手一般趋向与发求助帖或者问老手,这是正常的。但是,很多问题其实可以自己解决。
这里,我分享自己的经验
其实,这个方法也许大多数人都在使用,不过没有总结出来。
方法(一)把不懂的地方分离出来独自分析
方法(二):pause(一般先去掉开头的@echo off)
当自己写了一串代码,运行的时候一代而过,那个的郁闷啊!这个时候面对一串代码,我们首先分析大概在什么地方出错,这个时候pause就其作用了。
我们在代码不同的地方加上pause
然后运行,这样就容易发现错误代码的大概位置,这样就方便我们找了
方法(三):echo(一般先去掉开头的@echo off)
这个命令在我们看别人的代码的时候特别管用!
我们看老手的代码的时候,经常不懂这样语句的用法!效果。这个时候我们利用echo配合pause来观察效果。
下面我结合具体例子来分析下!
例子一:
@color 0a&@set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
@for,%%a,in,(%,%)do,@set]=%%a&echo.&echo.&@for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%<nul&@ping/n 1 127.1>nul
这段代码来自bbs.bathome.net的随风版主的个性签名。(随风版主对我的帮助满大的!)
这个代码随风故意弄了很多非常规的东西,我们一个一个揪出来吧!
一
set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
我们知道set 一般后面空格在加上变量的,这里没有空格直接来个逗号。。狂晕啊
我们吧这句话拿出来测试(利用echo 和pause)
sets=1 &echo %s% &pause
set/=1&echo %/% &pause
看有什么不同,说明了什么呢?又学到了什么呢?
二
@for,%%a,in,(%,%)do,@set]=%%a
这里怎么是for,%%a,
不是空格吗?难道for可以这样?赶快去测试下吧
for /l %%a in (1 1 2) do echo %%a &pause
for,/l,%%a in,(1 1 2) do echo %%a &pause
三
@for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%<nul&@ping/n 1 127.1>nul
看到这句是不是晕了,哈哈
我们来分解他
这个call就是延迟变量的!不管他!
set /p=%%]:~%%b,1%%<nul
这句就是利用字符截取和变量延迟来达到足个显示字的 效果!
但是为什么能显示 四句诗呢?
不懂?
你把上诉代码改为
set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
@for,%%a,in,(%,%)do,@set]=%%a
echo.&echo.&@for,/l,%%b,in,(0,1,6)do,@call,set/p= %%]:~%%b,1%%<nul &@ping/n 1 127.1>nul
执行一下!
发现了吗?(提示 &的作用!!)
例子二:
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 5) do set str=%%a
for /l %%i in (1 1 5) do set str1=!str1!%%i
echo %str%
echo !str1!
pause
结果分别位
5
12345
大家把代码改为
setlocal enabledelayedexpansion
for /l %%a in (1 1 5) do set str=%%a &echo !str! & pause
for /l %%i in (1 1 5) do set str1=!str1!%%i &echo !str1! & pause
echo %str%
echo !str1!
pause
知道不同了吧
呵呵
希望对大家有帮助
欢迎大家来bbs.bathome.net来一起探讨批处理的问题!
作者: aigongzhu 时间: 2008-3-4 23:21
我试过,是个死循环.
作者: ieutk 时间: 2008-3-5 09:09
- @echo off
- :R
- set "var=莪苁來莈絠停祉過想伱 爱你媞莪①亼啲諎"
- for %%a in (%var%)do set "aa=%%a"
- echo.
- echo.
- for /l %%b in (0,1,45) do call set/p= %%aa:~%%b,1%%<nul&ping /n 1 127.1>nul
- cls
- goto R
复制代码
这样应该好明白点吧
作者: 封印 时间: 2008-3-5 12:36
嗯,大家都很有见解,菜鸟我在这里学习了
作者: scdengting 时间: 2008-3-8 18:11
哎.,我也好想学习啊,可我太菜了,看不懂~~
作者: 浅默 时间: 2008-3-8 20:59 标题: 回复 8楼 的帖子
8楼的朋友这段 是不是这样?
一
set,=咬定青山不放松 立根原在破岩中 千磨万练还坚韧 任你东西南北风
我们知道set 一般后面空格在加上变量的,这里没有空格直接来个逗号。。狂晕啊
我们吧这句话拿出来测试(利用echo 和pause)
sets=1 &echo %s% &pause
set/=1&echo %/% &pause
看有什么不同,说明了什么呢?又学到了什么呢?
- sets=1 &call echo %%s%% &pause
- set/=1&call echo %%/%% &pause
复制代码
作者: kanlianhui 时间: 2008-3-9 18:23
<[email=nul&@ping/n]nul&@ping/n[/email] 1 127.1>
着句话是什么意思???
email????
作者: CZT 时间: 2008-8-29 16:19 标题: 回复 8楼 的帖子
novaa兄的话给了我等新手很大的启发
让我们知道了遇到看不懂的代码要怎么样把它弄懂
多谢了
作者: 愚无尽 时间: 2008-8-29 18:42
well 非常不错,特别novaa的详细解释和学习方法,值得大家领会
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |