shift

-------siwuxie095

   

   

   

   

shift

更改批处理文件中可替换参数的位置

   

   

语法: SHIFT [/n]

   

如果命令扩展被启用,SHIFT 命令支持 /n 命令行开关;该命令行开关告诉

命令从第 n 个参数开始移位;n 介于零和八之间。例如:

   

SHIFT /2

   

会将 %3 移位到 %2,将 %4 移位到 %3,等等;并且不影响 %0 和 %1

   

   

   

   

如:1 - 9 数据求和

@echo off

title 数据求和

set sum=0

call :sub sum 1 2 3 4 5 6 7 8 9

echo.

echo 数据求和结果:%sum%

pause>nul

:sub

set /a %1=%1+%2

shift /2

if not "%2"=="" goto sub

   

sublime中:

   

   

   

   

运行一览:

   

   

   

   

这里面:%0 - %9 依次表示:

%0

%1

%2

%3

%4

%5

%6

%7

%8

%9

:sub

sum

1

2

3

4

5

6

7

8

9

   

显然:%0 代表自身,具体到这里就是 :sub,而 %1 代表的 sum 这里的初值实际上是 0

shift /2 即将 %3 移位到 %2,%4 移位到 %3 …

   

   

注意:

1、子程序的参数 %1 - %9 不能直接在主程序中直接使用

如:echo 数据求和结果:%sum% 改为 echo 数据求和结果:%1

将没有任何显示

   

2、子程序中运算到最后,%2 - %9 都将变为空值,而 %1 即sum,变为45,即最后的结果。但此时如果在子程序中 echo %1 来看结果,显示出来的却是 sum,即是变量名,而不是变量值。同时批处理不允许 %%1% 的格式,即想要利用 %1 是无法显示出数值的,必须用 %sum% 的格式

   

3、set 命令不允许 set /a %1=%2+%3 这种将数值直接赋值到参数的运算(即从主程序到子程序),也不允许 set /a 3=4+5 这种将数值赋值到数值的运算。如果一定要使用 set /a %1=%2+%3 这种形式的运算,就要一开始就将变量赋值给 %1,如本例的sum(但很显然这样做,计算是错的)

   

   

如果在子程序中加入:echo %2 或 echo %3 或 echo %9

(1)

@echo off

title 数据求和

set sum=0

call :sub sum 1 2 3 4 5 6 7 8 9

echo.

echo 数据求和结果:%sum%

pause>nul

:sub

echo %2

set /a %1=%1+%2

shift /2

if not "%2"=="" goto sub

   

运行一览:

   

   

2

@echo off

title 数据求和

set sum=0

call :sub sum 1 2 3 4 5 6 7 8 9

echo.

echo 数据求和结果:%sum%

pause>nul

:sub

echo %3

set /a %1=%1+%2

shift /2

if not "%2"=="" goto sub

   

运行一览:

   

   

   

3

@echo off

title 数据求和

set sum=0

call :sub sum 1 2 3 4 5 6 7 8 9

echo.

echo 数据求和结果:%sum%

pause>nul

:sub

echo %9

set /a %1=%1+%2

shift /2

if not "%2"=="" goto sub

   

运行一览:

   

   

   

   

   

   

   

再如:

在桌面新建一个test文件夹,内有test.bat a.txt b.txt c.txt

   

   

test.bat:

@echo off

:loop

if "%1"=="" goto :end

echo %1的文本内容:

type %1

echo.

echo.

shift

goto :loop

 

:end

echo 没有获取到参数,结束脚本

   

a.txt(b.txt 和 c.txt 同):

   

运行一览:

   

   

   

对于:test.bat a.txt b.txt c.txt

%0

%1

%2

%3

test.bat

a.txt

b.txt

c.txt

   

批处理首先判断第一个参数 %1 是否为空,不为空,显示相应文本内容,执行到 shift 命令时,自动将 %1 移位到 %0,%2 移位到 %1,%3 移位 %2 (这里 shift 替换成 shift /0 或 shift /1 都可以,只要能移位到 %1都可,因为这是对 %1 进行判断,如果替换成 shift /2,则会无限循环 a.txt 的内容,如下图)

   

   

   

   

【made by siwuxie095】

原文地址:https://www.cnblogs.com/siwuxie095/p/6231309.html