-------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. mysql事务和并发控制

    谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...

  2. C++11引用临时变量的终极解析

    工作中遇到一个引用临时变量的问题,经过两天的学习,私以为:不仅弄明白了这个问题,还有些自己的独到见解. 这里使用一个简单的例子来把自己的学习过程和理解献给大家,如果有什么问题请不吝指正.   **** ...

  3. texy

    网络组件 WebView注册代码 <uses-permission android:name ="android.permission.INTERNET" /> 解释网 ...

  4. bonext.js学习笔记

    bonext.js是个什么鬼? 首先这是一个前端开发框架,建立在Backbone.js的基础上,使用Jquery操作Dom,Bootstrap负责布局,Art-Template渲染模板,再加上自定义一 ...

  5. swift 键盘属性与事件

    1.键盘的类型 textField1.keyboardType = UIKeyboardType.default //系统默认的虚拟键盘 textField1.keyboardType = UIKey ...

  6. Ninject之旅之六:Ninject约定

    摘要 在小的应用系统中一个一个注册一些服务类型不怎么困难.但是,如果是一个实际的有上百个服务的应用程序呢?约定配置允许我们使用约定绑定一组服务,而不用一个一个分别绑定. 要使用约定配置,需要添加Nin ...

  7. jQuery学习笔记(在js中增加、删除及定位控件的操作)

    代码内容很多都是从amazeui直接copy过来的,先声明,请不要说在下抄袭- - <!-------------------- HTML代码 ----------------------> ...

  8. 普通图片预览及demo(非分块)

    演示地址: http://codeman35.itongyin.com:19003/v2/image.html 功能:通过加载大图预览,这种方式无法和google art 比较.只能应用于简单的图片预 ...

  9. arcgis如何制作DEM数据

    DEM描述的是地面高程信息,它在测绘.水文.气象.地貌.地质.土壤.工程建设.通讯.军事等国民经济和国防建设以及人文和自然科学领域有着广泛的应用.如在工程建设上,可用于如土方量计算.通视分析等:在防洪 ...

  10. 一个解决adb5037端口被绑定问题的小程序-以管理员身份运行

    @echo start adb... @rem 获取绑定的进程id输出到一个临时文件 @call netstat -ano |findstr " |findstr "LISTENI ...