Board logo

标题: [其他] 批处理命令shift怎样恢复成指向第一个参数? [打印本页]

作者: 悬崖之树    时间: 2013-7-10 21:22     标题: 批处理命令shift怎样恢复成指向第一个参数?

  1. echo %1
  2. shift
  3. echo %1
复制代码
这里第二个%1就指向第二个参数了,但是我希望再将它恢复成指向第一个参数,怎么办?
作者: terse    时间: 2013-7-10 21:37

这样的话  这里的 shift 作用是什么 你为什么放上它 shift 应该没倒挡啊
作者: Python    时间: 2013-7-10 22:44

shift命令本身没这功能,你必须自己写代码模拟。
作者: zz100001    时间: 2013-7-11 10:24

%1 变了,但是 %* 没有变啊,重新传一下参数即可
  1. @echo off
  2. echo 最初的参数:%1,%2,%3
  3. shift
  4. echo 去掉第一个:%1,%2,%3
  5. REM ======== 开始 ========
  6. call :RecoverArgs %*
  7. goto :eof
  8. :RecoverArgs
  9. REM ======== 结束 ========
  10. echo 原始的参数:%1,%2,%3
  11. shift
  12. echo 重新移一位:%1,%2,%3
  13. pause
复制代码

作者: 悬崖之树    时间: 2013-7-11 14:51

回复 4# zz100001


   用下面代码测试:
  1. @echo off
  2. echo %1 %2 %3
  3. shift
  4. echo %1 %2 %3
  5. call :re %*
  6. echo %1 %2 %3
  7. pause
  8. :re
  9. 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 某个函数,像这样:
  1. %0 %*
复制代码
这个例子可以把 shift 拨回参数头部,不过 %0 会变成函数名
  1. @echo off
  2. shift
  3. echo %1
  4. call :s %*&exit
  5. :s
  6. echo %1
  7. pause
复制代码

作者: zz100001    时间: 2013-7-12 10:29

回复 5# 悬崖之树


    既然如此,为何不把要用到shift的代码写到最后用call来调用呢,你也发现了在call里面shift不会改变原始参数的。




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