shift 命令用于更改批处理文件处理参数的方式,如指定起始处理参数的位置等。先使用 shift /? 看看帮助信息:
C:\Users\Administrator\Desktop>shift /? 更改批处理文件中可替换参数的位置。 SHIFT [/n] 如果命令扩展被启用,SHIFT 命令支持/n 命令行开关;该命令行开关告诉 命令从第 n 个参数开始移位;n 介于零和八之间。例如: SHIFT /2 会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1。
实例1:利用 shift 命令动态输出批处理执行时输入的所有参数。
@echo off :round if "%1"=="" goto cmd1 echo 参数:%1 shift goto round :cmd1 echo 没有获取到参数,结束脚本 goto end :end
输出结果:
C:\Users\Administrator\Desktop>test.bat arg1 arg2 arg3 参数:arg1 参数:arg2 参数:arg3 没有获取到参数,结束脚本
实例2:使用 shift /n 的方式重新设置处理参数的起止位置。
@echo off echo 参数1:%1 echo 参数2:%2
输出结果:
C:\Users\Administrator\Desktop>test.bat arg1 arg2 arg3 参数1:arg1 参数2:arg2
运行上面实例时,我们传递了3个参数,分别是:arg1 arg2 arg3
如果我们在执行 echo 之前添加 “shift /2” 命令,cmd.exe 将把传递参数的起始位置设置为2,即 %3 移动 %2。代码如下:
@echo off shift /2 echo 参数1:%1 echo 参数2:%2
输出结果:
C:\Users\Administrator\Desktop>test.bat arg1 arg2 arg3 参数1:arg1 参数2:arg3
实例3:使用 shift命令和批处理子程序实现累加功能。
@echo off set sum=0 rem 调用子程序 call :sub sum 1 2 3 4 echo sum=%sum% pause rem 定义一个子程序 :sub set /a %1=%1+%2 shift /2 if not "%2"=="" goto sub goto :eof
输出结果:
C:\Users\Administrator\Desktop>test.bat sum=10 请按任意键继续. . .