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

[其他] 批处理命令shift怎样恢复成指向第一个参数?

  1. echo %1
  2. shift
  3. echo %1
复制代码
这里第二个%1就指向第二个参数了,但是我希望再将它恢复成指向第一个参数,怎么办?
时光荏苒||新陈代谢&&涛声依旧||本性难移

这样的话  这里的 shift 作用是什么 你为什么放上它 shift 应该没倒挡啊

TOP

shift命令本身没这功能,你必须自己写代码模拟。

TOP

%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
复制代码
1

评分人数

TOP

回复 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的确是指向第一个参数的。
时光荏苒||新陈代谢&&涛声依旧||本性难移

TOP

本帖最后由 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
复制代码

TOP

回复 5# 悬崖之树


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

TOP

返回列表