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