标题: [其他] 批处理命令shift怎样恢复成指向第一个参数? [打印本页]
作者: 悬崖之树 时间: 2013-7-10 21:22 标题: 批处理命令shift怎样恢复成指向第一个参数?
复制代码
这里第二个%1就指向第二个参数了,但是我希望再将它恢复成指向第一个参数,怎么办?
作者: terse 时间: 2013-7-10 21:37
这样的话 这里的 shift 作用是什么 你为什么放上它 shift 应该没倒挡啊
作者: Python 时间: 2013-7-10 22:44
shift命令本身没这功能,你必须自己写代码模拟。
作者: zz100001 时间: 2013-7-11 10:24
%1 变了,但是 %* 没有变啊,重新传一下参数即可- @echo off
- echo 最初的参数:%1,%2,%3
- shift
- echo 去掉第一个:%1,%2,%3
- REM ======== 开始 ========
- call :RecoverArgs %*
- goto :eof
- :RecoverArgs
- REM ======== 结束 ========
- echo 原始的参数:%1,%2,%3
- shift
- echo 重新移一位:%1,%2,%3
- pause
复制代码
作者: 悬崖之树 时间: 2013-7-11 14:51
回复 4# zz100001
用下面代码测试:- @echo off
- echo %1 %2 %3
- shift
- echo %1 %2 %3
- call :re %*
- echo %1 %2 %3
- pause
- :re
- echo %1 %2 %3
复制代码
运行结果 :
在cmd里输入 test.bat a b c
出现
a b c
b c
a b c
b c
发现全局的%1并没有被恢复成指向第一个参数。
但是子程序里的%1的确是指向第一个参数的。
作者: CrLf 时间: 2013-7-11 18:49
本帖最后由 CrLf 于 2013-7-11 18:51 编辑
shift 不可逆,只能再调用自身或 call 某个函数,像这样:复制代码
这个例子可以把 shift 拨回参数头部,不过 %0 会变成函数名- @echo off
- shift
- echo %1
- call :s %*&exit
- :s
- echo %1
- pause
复制代码
作者: zz100001 时间: 2013-7-12 10:29
回复 5# 悬崖之树
既然如此,为何不把要用到shift的代码写到最后用call来调用呢,你也发现了在call里面shift不会改变原始参数的。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |