zoukankan      html  css  js  c++  java
  • 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】

  • 相关阅读:
    vuex 数据持久化
    vue中通过第三方代理解决跨域问题
    谷歌浏览器格式化插件
    mongodb安装配置
    Nodejs express中创建ejs项目
    elementui tree 组件实现鼠标移入节点,节点后面显示添加删除按钮
    iframe页面无法跳转问题
    elementui table组件,根据数据的不同,显示不同的内容
    elementui tree组件自定义图标
    Aborting a running program
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6231309.html
Copyright © 2011-2022 走看看