找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29356|回复: 6

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

[复制链接]
发表于 2013-7-10 21:22:04 | 显示全部楼层 |阅读模式
  1. echo %1
  2. shift
  3. echo %1
复制代码
这里第二个%1就指向第二个参数了,但是我希望再将它恢复成指向第一个参数,怎么办?
发表于 2013-7-10 21:37:40 | 显示全部楼层
这样的话  这里的 shift 作用是什么 你为什么放上它 shift 应该没倒挡啊
发表于 2013-7-10 22:44:11 | 显示全部楼层
shift命令本身没这功能,你必须自己写代码模拟。
发表于 2013-7-11 10:24:37 | 显示全部楼层
%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技术 +1 收起 理由
cutebe + 1 GOOD

查看全部评分

 楼主| 发表于 2013-7-11 14:51:14 | 显示全部楼层
回复 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的确是指向第一个参数的。
发表于 2013-7-11 18:49:33 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2013-7-12 10:29:02 | 显示全部楼层
回复 5# 悬崖之树


    既然如此,为何不把要用到shift的代码写到最后用call来调用呢,你也发现了在call里面shift不会改变原始参数的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 09:59 , Processed in 0.024587 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表