Board logo

标题: [文本处理] 【已解决】批处理中退格符的作用是什么? [打印本页]

作者: xushaolong2009    时间: 2009-4-14 13:57     标题: 【已解决】批处理中退格符的作用是什么?

看看随风大大关于“shift 命令详解”的教程,大致了解了shift命令。只是里面有几行代码,想破脑袋也没弄明白
http://bbs.bathome.net/viewthread.php?tid=107&highlight=shift%2B%C3%FC%C1%EE%CF%EA%BD%E2
  1.   
  2. set num=
  3. set num=%num%
  4.   .
  5.   .
  6.   .
  7. set /p=%num%<nul
  8.   
复制代码
看看后面的zqz0012005大大说法
  1. 确切地说,一个退格符是将光标往前移动一位,接着出现的字符会将原来的字符覆盖。
复制代码
有了个模糊的印象。

可是还是弄不明白,之后我把两个set命令删掉了,就出现了附件上面得现象(大小有限定,图就截小了,画面上显示的颜色是最后一步的)

  想仔细听下那两行代码的详细命令???希望大大们帮助!
[attach]1542[/attach]
作者: Batcher    时间: 2009-4-14 16:08

那两个set命令就是把一定数量的退格符赋值给变量num
它的作用就是删除每次执行:lis循环时产生的回显结果
你把它们删掉自然会出现截图中的结果
作者: xushaolong2009    时间: 2009-4-14 16:13     标题: 退格符数量

哦,那退格符的数量有限制吗,或是随便输入,还是根据下文要出现的字符来输入?!
   第二个nun=%num%退格符  有什么用,上面不是已经赋值了吗?!
作者: Batcher    时间: 2009-4-14 17:19     标题: 回复 3楼 的帖子

你可以自己试试把两个set命令中的退格符合并到一个set命令里面
作者: batman    时间: 2009-4-14 20:20

我不认为这样赋值是好的,完全可以用下面这种方式来赋值:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,26) do set "str=!str!"
  3. echo 下面的字母在3秒后会变成大写字母
  4. set /p=abcdefghijklmnopqrstuvwxyz<nul
  5. ping /n 4 127.1>nul
  6. set /p=%str%<nul&set /p=ABCDEFGHIJKLMNOPQRSTUVWXYZ<nul
  7. pause>nul
复制代码

作者: xushaolong2009    时间: 2009-4-14 22:07     标题: 体会

哦,明白了,正如四楼大大说的,
  1. 那两个set命令就是把一定数量的退格符赋值给变量num
  2. 它的作用就是删除每次执行:lis循环时产生的回显结果
  3.    
复制代码
删掉的话,就会出现在图片就结果。如果把两个set和在一起效果也一样,我猜测可能是一则是代码整齐、二则退格符聚在一起眼花吧
  五楼大大的 "str=!str!"  是什么意思?!  我只知道的是 set 设置变量str,便把!str!赋值给给str,那个退格符 是不是一次“清洗”  abcdefghijklmnopqrstuvwxyz ? 课只有一个退格符啊,怎么一起都“清洗”了
  还有个问题
  1.   call :lis 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  2.   color 0b
  3.   echo\&echo 测试完毕,按任意键退出 ……
  4.   echo\&pause>nul&exit
  5.   :lis
  6.   set /p=%num%<nul
  7.   if "%5"=="" goto :eof
  8.   shift /5
  9.   set /p=移位后的参数为 : %1 %2 %3 %4 %5 %6 %7 %8 %9<nul
  10.   set /p=     按任意键继续......<nul
  11.   pause>nul
  12.   goto lis
  13.   
复制代码
还是上面的例子 call与goto,  if "%5"=="" goto :eof 意思是如果第五个参数为空的话就跳到末尾,可是最后末尾不是:lis么 ,怎么执行的时候是跳到color,这时可能是call作怪,call执行完后还会回来再执行一次,于是就出现了最后显示有颜色的代码。 那么这两个代码是不是有矛盾???

  之后我把goto:eof去掉,屏幕就一闪而过;不去掉goto:eof,在前面加上::  程序继续执行,只是最后停在
  1. 没有移位后的参数为 : 01 02 03 04          按任意键继续................
复制代码
怎么理解这连个代码在此段的意思???

[ 本帖最后由 xushaolong2009 于 2009-4-14 22:55 编辑 ]
作者: Batcher    时间: 2009-4-14 23:07     标题: 回复 6楼 的帖子

eof 是 end of line 的缩写
goto :eof 就是跳转到最后一行代码的下一行(什么都没有)
作者: xushaolong2009    时间: 2009-4-15 12:14     标题: 恢复7楼大大的

哦,明白了!谢谢!!!




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2