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

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 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

回复 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是根据什么得来的?

TOP

回复 21楼 的帖子

(*^_^*)

TOP

请问这个要怎么输入啊??

TOP

个人理解

个人觉得,楼主的上面代码
  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 编辑 ]
1

评分人数

TOP

回复 17楼 的帖子

这样的代码大多用于动画
在动画中如果按照你说的全用cls是得不到好效果的
你可以自己尝试一下
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

去试试,好多地方不是很懂

TOP

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

让我想了好几个小时,其实就是一个"cls" 就可以替换了, 我看到了几个例子都有很多类似的情况

TOP

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

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

[ 本帖最后由 firewolf85 于 2008-12-10 08:44 编辑 ]

TOP

先学习下,有问题再问

TOP

闪烁效果

@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

TOP

刚刚接触,不太明白。。。

TOP

怎么输入   谢谢

TOP

9楼只是为了单纯回答8楼的问题,如果具体到在楼主代码中的作用,请参考10楼解答^_^
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9楼 的帖子

确切地说,一个退格符是将光标往前移动一位,接着出现的字符会将原来的字符覆盖。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

返回列表