• set 续2


    --------siwuxie095

       

       

       

       

    set 命令进行字符串处理(这个不应只属于 set 的内容,应该归属于格式内容,

    在没有 set 的情况下,格式仍旧适用)

       

       

    1、字符串替换

       

    %PATH:str1=str2%

       

    将字符串变量%PATH%中的 str1 替换为 str2,由于 str1 可以是整个 PATH 的值,

    也可以是部分 PATH 的值,所以用此语法更多是部分替换 PATH 的值

       

    要替换全部 PATH 的值,直接用 set PATH = string

    需要说明的是,%PATH:str1=str2% 不依赖 set 而存在,

    set 一起使用,只不过可以将替换后的内容赋值到某变量而已

       

    如:

    @echo off

    set a= bbs. verybat. cn

    ::一开始的 a 变量里包含有三个空格符号。

    echo 替换前的值: "%a%"

    set var=%a: =%

    :: a 变量里的所有内容,空格都替换掉(在这里没有替换什么内容,表示删除)

    echo 替换后的值: "%var%"

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

       

    2、字符串截取

       

    %a:~[m[,n]]%

       

    方括号表示可选,% 为变量标识符,a 为变量名,冒号用于分隔变量名

    和说明部分,~ 可简单理解为"偏移"即可,m n 可以取正数,也可以

    取负数,表不同含义

       

       

    需要说明的是,%a:~[m[,n]]% 不依赖 set 可单独使用,

    如:echo %time:~0,-3%,表示显示时间的时、分、秒

    (不显示毫秒),set 说到底,还是赋值功能

       

       

    关于 %a:~[m[,n]]%m n 取值含义:

       

    m 正 或 0,n 正

    舍弃变量 a 的前 m 位,后再取其 n 位

    m 正 或 0,n 负

    舍弃变量 a 的前 m 位和舍弃末尾的 n 位后剩下的值

    m 正 或 0,n 缺省

    舍弃变量前 m 位后,取剩下的所有值

    m 负,n 正

    取变量 a 的末尾 m 位,后再取前 n 位

    m 负,n 负

    取变量 a 的末尾 m 位,后舍弃末尾的 n 位后剩下的值

    m 负,n 缺省

    取变量末尾 m 位

       

    注意:n 值可以缺省,但不可以为 0。m 值可以是任意值

       

       

    假如变量 a 代表字母表的一串 26 个字母

    %a:~7,3%

    值为 HIJ

    %a:~0,1%

    值为 A

    %a:~7,-3%

    值为 HIJKLMNOPQRSTUVW

    %a:~-7,3%

    值为 TUV

    %a:~-7,-3%

    值为 TUVW

    %a:~3%

    值为 DEFGHIJKLMNOPQRSTUVWXYZ

    %a:~-3%

    值为 XYZ

    %a:~0,-3%

    值为 ABCDEFGHIJKLMNOPQRSTUVW

       

    m 是正 0,表示舍弃前 m 位;n 是负,表示舍弃后 n

       

       

    经典的实时显示时间:

    @echo off

    ::time 取出时间值,-3 表示不显示后三位字符。这个格式只显示时间的时、分、秒。

    echo %time:~0,-3%

    ping -n 2 127.1>nul&cls&%0

       

    sublime中:

       

       

       

       

    set 用法格式总结:

    set var=abc

    直接给变量赋值

    set /p var=请输入:

    将用户输入赋值到变量

    set /a var=num1+num2

    数值计算 1

    set /a var+=1

    数值计算 2

     

       

    一种比较怪异的写法:

    @echo off

    set var=123456

    set cmdstr=echo %var%

    %cmdstr%

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

       

    注意:

    set 不可以对常量进行赋值

    set 不可以对参数 %0 - %9 进行计算

    set 不可以对 for 循环变量 %%i 进行计算

    set for 的循环上下限变量进行计算不会改变循环次数

       

       

    如:这三种形式的计算都是不可以的

    :: 形式 1

    set /a 9=4+5

    :: 形式 2

    set /a %1+=1

    :: 形式 3

    set /l %%i in (1,1,10) do set %%i*=3

       

    sublime中:

       

       

       

    再如:

    对 for 上下限进行计算看,但不会改变循环次数。也就是说,循环

    次数在循环开始前就固定了,不会在循环中发生任何变化

    @echo off

    setlocal enabledelayedexpansion

    set /a min=1,max=10

    for /l %%i in (!min!,1,!max!) do (

    echo min=!min! max=!max!

    set /a min+=1

    set /a max*=2

    )

    pause

       

    sublime中:

       

       

       

       

       

       

       

    【made by siwuxie095】

       

       

       

       

       

       

       

       

       

       

  • 相关阅读:
    以结构体为键值的map
    Luogu P1251 餐巾计划问题 (最小费用最大流、拆点)
    CodeForces
    CodeForces
    中缀表达式转后转表达式
    CodeForces
    Educational Codeforces Round 100
    2020年12月杂题选做
    2020年11月杂题选做
    CF542E Playing on Graph
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6368631.html
Copyright © 2020-2023  润新知