-------siwuxie095

shift

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

语法: SHIFT [/n]

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

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

SHIFT /2

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

如:1 - 9 数据求和

@echo off

title 数据求和

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

echo.

echo
数据求和结果:%sum%

pause>nul

:sub

set /a %1=%1+%2

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

sublime中:

运行一览:

这里面:%0 - %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 数据求和

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

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

运行一览:

(2)

@echo off

title 数据求和

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

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

运行一览:

(3)

@echo off

title 数据求和

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

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】

shift的更多相关文章

  1. shift粘滞键后门创建/复原批处理

    创建shift粘滞键后门: 1 c: 2 3 cd \Windows\System32\ 4 5 rename sethc.exe bak_sethc.exe 6 7 xcopy cmd.exe se ...

  2. Javascript——arguments的shift问题谈方法“借用”

    今天本来运行了打算这样的方法 arguments.shift() (shift方法是删除数组的第一个元素,例如var arr=[1,2,3,4,5]执行var a=arr.shift();之后,a的值 ...

  3. js中push(),pop(),unshift(),shift()的用法小结

    1.push().pop()和unshift().shift() 这两组同为对数组的操作,并且会改变数组的本身的长度及内容. 不同的是 push().pop() 是从数组的尾部进行增减,unshift ...

  4. eclipse通过ctrl+shift+t无法找到源文件类的解决方法

    通过ctrl + shift + t找对应的类时,类明明存在,并且也在编译路径下,但就是查找不到,一个可能的原因就是eclipse为类建立的索引出了问题. 解决的方法是:找到项目所在工作空间下的.me ...

  5. Javascript的shift()和push(),unshift()和pop()方法简介

    栈方法: Javascript为数组专门提供了push()和pop()方法,以便实现类似栈的行为.来看下面的例子: var colors=new Array();       //创建一个数组 var ...

  6. JS数组操作示意图(shift,unshift,pop,push)

    shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a:[2,3,4,5] b: ...

  7. Bash:-:-通过while和shift判断脚本位置参数格式是否合法

    ]];then echo "请输入2个位置参数..." exit else num=$# ));do case ${num} in ) if ! echo "${1}&q ...

  8. Bash:-set设置位置变量结合while和shift使用

    #!/bin/bash aaa=( ) bbb=(a b c d) set -- ${aaa[@]} ));do } shift done set -- echo "------------ ...

  9. 小tip:关于typeof,instanceof,toString(),valueOf(),toLocaleString(),join(),reverse(),sort(),pop(),push(),shift(),unshift()

    typeof:用于检测一个变量是否是基本数据类型.instanceof用于检测某引用对象是什么类型的对象. var s = "Nicho"; var b = true; var n ...

  10. Shift的用法

    Shell编程中Shift的用法     位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的 ...

随机推荐

  1. Burp SuiteBurp Suite使用详解

    http://www.2cto.com/Article/201209/153312.html Burp Suite是Web应用程序测试的最佳工具之一,其多种功能可以帮我们执行各种任务.请求的拦截和修改 ...

  2. 总结一下 input propertychange

    最近做的一些项目,经常遇到输入框检查的需求,最常见的是即时搜索,今天好好小结一下. ========================================================== ...

  3. DES对称性加密

    using System; using System.Security.Principal; using System.Security.Permissions; using System.Secur ...

  4. review again and again

    盲评结果出来了.然而对于我并没有太大的影响.从头到尾我没有紧张过,自然也不会有如释重负的感觉. 昨天说了事情要提前做准备.早上,到教研室挺早,review的时候,发现论文中一个关于目录的小问题,解决掉 ...

  5. IOS开发者账号申请记录

    1. 准备好一个企业邮箱 .企业营业执照复印件.一张可以支付的VISA或者MasterCard 2. 2016/01/13 注册appid https://developer.apple.com/pr ...

  6. 浅尝辄止——使用ActiveX装载WPF控件

    1 引言 使用VC编写的容器类编辑器,很多都可以挂接ActiveX控件,因为基于COM的ActiveX控件不仅封装性不错,还可以显示一些不错的界面图元. 但是随着技术不断的进步,已被抛弃的Active ...

  7. Java日志——2016年5月31日

    1. 三元运算符(A?B:C)属于运算符,表达式必须具有返回值,则A必须是boolean类型值,B和C必须是一个具有返回值的表达式. 2. switch...case本质上只支持int类型的选择判断, ...

  8. 第六百一十天how can I 坚持

    今天又去了趟ccrs,终于把环境打起来了,下午就去中关村了,回来的时候还忘了带电脑电源,明天还得去fh,也是醉了.. 好困啊.得睡觉了,项目感觉也不是多难,不过代码还得好好熟悉熟悉.加油吧.

  9. DataRow循环取出

    string strName = null; DataRow dRow = DB.GetDataRow(Sql语句); if (null != dRow) { foreach (DataRow ite ...

  10. JS学习之路(这个觉得写的很好,放在这里是方便查看)

    总则-都是对象,都是引用 在接触js前用的比较多的是java,在刚开始接触js的时候,老实讲,我是有点崩溃的,相信许多像我一样从后端语言向js转的童鞋们肯定有一样的感受,这玩意儿太灵活了,好像怎么样都 ...