zoukankan      html  css  js  c++  java
  • 批处理集锦——(2)自定义函数

    涉及知识点:

      1、如何定义一个函数

      2、如何传递参数

      3、如何调用?

      4、如何获取返回值

      5、GOTO:EOF 和 exit /b 0的区别

      6、如何在字符串替换的时候处理变量

      7、具体实例

    正文部分:

    1、定义

      

    :functionname
     
          rem 参数是 %0,%1,...%n
        
      rem todo
    
    goto:eof

    2、参数和调用

      

    call :functionname 参数1(对应%1),参数2(对应%2),...参数n(对应%n)

    4、关于返回值,直接修改全局变量,批处理是没有函数返回值的

    5、关于goto:eof和exit /b 0的区别

    rem  goto:eof 相当于函数的} 结尾标记,返回到调用者位置
    rem  exit /b 0  结束当前cmd,返回exitCode 0

    6、字符串替换中处理变量

     1 set str_find=%1
     2 set str_replace=%2
     3 set str_string=%3
     4 
     5 ::call命令会对其参数进行扩展
     6 ::call set "strok=%%str_string:!str_find!=!str_replace!%%"
     7     
     8 ::也可以启用变量延迟来实现
     9 ::@echo off&setlocal enabledelayedexpansion
    10 ::set "var=!var:%mat%=!
    11 
    12 set "strok=!str_string:%1=%2!"

    7、具体实例

    @echo off
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    title bat function
    
    ::author:lovelp
    ::link:http://www.cnblogs.com/lovelp/p/5720046.html
    
    set str1="this is a old string"
    set str2="this is a new string"
    
    echo=
    ::=============================================
    ::设置变量strok,全局,用于实现函数返回值
    set strok=" "
    echo 函数调用语句为: call :func1 this is a old string,this is a new string
    echo 函数结束参数,分别为 %%0,%%1,%%2,...,%%n
    call :func1 %str1%,%str2%
    
    
    echo 以上结果是解释函数参数
    echo.
    
    echo 下面才是重点,调用自定义函数实现字符串替换
    echo.
    echo call :fun_replace old,旧的,this is a old string
    
    call :fun_replace old,旧的,%str1%
    
    echo.
    echo ↓↓↓↓调用结束,显示结果↓↓↓↓↓↓↓
    echo %strok%
    
    ::=============================================
    
    exit /b 0
    
    
    :fun_replace
        set str_find=%1
        set str_replace=%2
        set str_string=%3
        
        echo 查找的字符串是: !str_find!
        echo 最终替换后的字符串是: !str_replace!
        echo 字符串主体是: %str_string%
            
        ::call命令会对其参数进行扩展
        ::call set "strok=%%str_string:!str_find!=!str_replace!%%"
        
        ::也可以启用变量延迟来实现@echo off&setlocal enabledelayedexpansion
        ::set "var=!var:%mat%=!
        
        set "strok=!str_string:%1=%2!"
    GOTO:EOF 
    ::exit /b 0
    
    REM (1) 运行 GOTO :EOF 后, CMD 返回并将等待下一条命令.
    REM (2) 运行 EXIT 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
    REM (3) 运行 EXIT /B 后, CMD 将直接关闭并返回到曾启动 cmd.exe 的程序或返回到”资源管理器”.
    
    
    ::函数名 :func1  带冒号哦
    ::参数1,%0  就是函数名本身  :func1
    ::函数2、3...n  就是常见的形参了
    :func1
        echo %%0 is %0
        echo %%1 is %1
        echo %%2 is %2
    GOTO:EOF 
    
    
    pause

     

  • 相关阅读:
    lucene倒排索引瘦身的一些实验——merge的本质是减少cfx文件 变为pos和doc;存储term vector多了tvx和tvd文件有337M
    lucene Index Store TermVector 说明
    Lucene in action 笔记 term vector——针对特定field建立的词频向量空间,不存!不会!影响搜索,其作用是告诉我们搜索结果是“如何”匹配的,用以提供高亮、计算相似度,在VSM模型中评分计算
    Kappa:比Lambda更好更灵活的实时处理架构
    Lucene 的四大索引查询 ——bool 域搜索 通配符 范围搜索
    lucene 5可以运行的demo
    lucene 5的测试程序——API变动太大
    随机生成50个字段的elasticsearch的测试程序输入
    NOSQL安全攻击
    容斥原理及应用
  • 原文地址:https://www.cnblogs.com/lovelp/p/5720046.html
Copyright © 2011-2022 走看看