Board logo

标题: shift 命令详解 [打印本页]

作者: 随风    时间: 2007-11-11 01:14     标题: shift 命令详解

::
  1. @echo off&goto loop
  2. shift 命令详解
  3. shift 是将所有参数往前移动一位。
  4. shift /2 是从第2个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1)
  5. shift /3 是从第3个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1,2)
  6. 依次类推 …… ……
  7. :loop
  8. @echo off&echo\
  9. set num=
  10. set num=%num%
  11. echo 没移位的参数为 : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  12. echo\&echo 参数 1234 始终没有变化,但后面的却在逐位变化,前移。
  13. echo\
  14. :: 作者:随风   @bbs.bathome.net   2007-11-10
  15. ::
  16. call :lis 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  17. color 0b
  18. echo\&echo 测试完毕,按任意键退出 ……
  19. echo\&pause>nul&exit
  20. :lis
  21. set /p=%num%<nul
  22. if "%5"=="" goto :eof
  23. shift /5
  24. set /p=移位后的参数为 : %1 %2 %3 %4 %5 %6 %7 %8 %9<nul
  25. set /p=     按任意键继续......<nul
  26. pause>nul
  27. goto lis
复制代码

[ 本帖最后由 随风 于 2007-12-14 14:53 编辑 ]
作者: ieutk    时间: 2007-12-14 11:30

是不错,以前很少用此命令,最近在编写一批处理程序时用到感觉此命令很好用
作者: 追月    时间: 2007-12-17 20:57

反正我没用过
作者: zcs77511924    时间: 2008-2-23 17:04

不懂也看看
作者: xaomianyang    时间: 2008-2-24 10:26

里面有几个看不懂能不能给解释一下,loop  num     call   lis  color 0b    goto :eof       >unl 这些我都看不懂,不能帮忙解释一下啊谢谢了。
作者: solitude    时间: 2008-8-2 23:50

基本看不懂,可能是太晚了想睡觉了
这个字符是什么意思呢?我一直都弄不明白!
作者: cr8086    时间: 2008-10-2 09:39

,应该是显示错误吧?
作者: AK47    时间: 2008-10-13 11:19

 楼主帮忙解释下这个是什么意思吧!
作者: Batcher    时间: 2008-10-13 11:24     标题: 回复 8楼 的帖子

一个就是一个退格键backspace,作用就是删除前面一个字符
作者: zqz0012005    时间: 2008-10-13 11:31     标题: 回复 9楼 的帖子

确切地说,一个退格符是将光标往前移动一位,接着出现的字符会将原来的字符覆盖。
作者: Batcher    时间: 2008-10-13 14:02

9楼只是为了单纯回答8楼的问题,如果具体到在楼主代码中的作用,请参考10楼解答^_^
作者: wuzhihui001    时间: 2008-10-26 18:49

怎么输入   谢谢
作者: luzhanhong    时间: 2008-10-27 13:23

刚刚接触,不太明白。。。
作者: lhjoanna    时间: 2008-10-30 00:55     标题: 闪烁效果

@echo off
setlocal enabledelayedexpansion
title 闪烁效果
:start
color 0e
set str=人生得意须尽欢
for /l %%i in (0 1 6) do (
    set /p=!str:~%%i,1!<nul
    rem 依次取出变量str中的每一个字符,并显示
    ping -n 0 127.1>nul
    rem 设置每个输出字符的延迟时间
)
set /p a=<nul
rem 输出一些退格符使光标置于该行最左端
set /p a=                  <nul
rem 输出空格将之前文字覆盖
set /p a=<nul
rem 再次输出退格符使光标位于最左端(数量要多余之前的空格数)
goto start
作者: MarkovChain    时间: 2008-12-3 02:14

先学习下,有问题再问
作者: firewolf85    时间: 2008-12-7 19:00

效果看到了,但完全的绕晕了,太多的跳转没明白是怎么实现的

经过一个近一个星期的学习,终于可以看个大概了

[ 本帖最后由 firewolf85 于 2008-12-10 08:44 编辑 ]
作者: ahongguo    时间: 2008-12-28 09:42

我是个新手,有说错的地方请见量
  我觉得我们论坛一些例子中有些过于让人难理解,如上面14楼中的这些
set /p a=<nul
rem 输出一些退格符使光标置于该行最左端
set /p a=                  <nul
rem 输出空格将之前文字覆盖
set /p a=<nul
rem 再次输出退格符使光标位于最左端(数量要多余之前的空格

让我想了好几个小时,其实就是一个"cls" 就可以替换了, 我看到了几个例子都有很多类似的情况
作者: 5810239q    时间: 2009-3-29 12:24

去试试,好多地方不是很懂
作者: Batcher    时间: 2009-3-29 12:37     标题: 回复 17楼 的帖子

这样的代码大多用于动画
在动画中如果按照你说的全用cls是得不到好效果的
你可以自己尝试一下
作者: xushaolong2009    时间: 2009-4-16 12:09     标题: 个人理解

个人觉得,楼主的上面代码
  1. set num=
  2. set num=%num%
复制代码
其实没必要写那么多。而且里面的有多余,其实只需输入66个就行了,而且还可以换一种形式来表达,看看下面的个人改进的代码
  1. @echo off&goto loop
  2. shift 命令详解
  3. shift 是将所有参数往前移动一位。
  4. shift /2 是从第2个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1)
  5. shift /3 是从第3个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1,2)
  6. 依次类推 …… ……
  7. :loop
  8. @echo off&echo\
  9. echo 没移位的参数为 : 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  10. echo\&echo 参数 1234 始终没有变化,但后面的却在逐位变化,前移。
  11. echo\
  12. :: 作者:随风   @bbs.bathome.net   2007-11-10
  13. ::
  14. call :lis 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
  15. :1
  16. color 0b
  17. echo\&echo 测试完毕,按任意键退出 ……
  18. echo\&pause>nul&exit
  19. :lis
  20. if "%5"==""  goto 1
  21. shift /5
  22. set /p=移位后的参数为 : %1 %2 %3 %4 %5 %6 %7 %8 %9<nul
  23. set /p=     按任意键继续......<nul
  24. for /l %%i in (1,1,66) do (
  25. set /p aa=<nul
  26. )
  27. pause>nul
  28. goto lis
复制代码
细心的朋友可能还看出了我把goto:eof也改了,这是为了方便新手朋友们阅读,说实在的我到现在还没明白源代码里的goto:eof是怎么转到
  1. color 0b
  2. echo\&echo 测试完毕,按任意键退出 ……
  3. echo\&pause>nul&exit
复制代码
其中的
for /l %%i in (1,1,66) do (
set /p aa=<nul
::输出66个退格符,使光标移到该行的最左面。注意:是退格符(在txt中显示为一个实心的黑方块)。
::一个退格符的作用就是使得窗口中的光标往前退一格。

ps:这几天又仔细拜读了前辈们的大作,终于明白了goto:eof是怎么转到
  1. color 0b
  2. echo\&echo 测试完毕,按任意键退出 ……
  3. echo\&pause>nul&exit
复制代码


原来goto:eof如果在call后的子程序中,当命令执行到goto:eof时,则表示结束该子程序,回到父程序中,于是接下来变执行call后面的
  1. color 0b
  2. echo\&echo 测试完毕,按任意键退出 ……
  3. echo\&pause>nul&exit
复制代码


如果新手朋友们不怎么明白什么子程序、父程序,那么更通俗的说法(个人观点),当程序执行到goto:eof时,会自动忽视下面的代码,也就是把该命令当做结尾,同时由于上面有call命令,于是就返回到call命令下面执行了。



这时才发现前几天自己擅自修改大大那处的代码,汗……啊,为了纪念刚开始的无知,就不改回了。


相信和我一样的新手朋友们看了后会对楼主的意思有所理解的。

[ 本帖最后由 xushaolong2009 于 2009-4-18 09:54 编辑 ]
作者: q625805390    时间: 2009-7-27 17:45

请问这个要怎么输入啊??
作者: keen    时间: 2009-7-27 19:57     标题: 回复 21楼 的帖子

如何生成退格符:
http://www.bathome.net/viewthrea ... =%CD%CB%B8%F1%B7%FB
作者: zhouyao17    时间: 2009-11-27 07:54     标题: 回复 20楼 的帖子

set /p=移位后的参数为 : %1 %2 %3 %4 %5 %6 %7 %8 %9<nul
set /p=     按任意键继续......<nul
for /l %%i in (1,1,66) do (
set /p aa=<nul

1,1,66这个没看懂。66是根据什么得来的?




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