• set 续3


    -------siwuxie095

       

       

       

       

    set 技巧高级篇:

       

    1、利用 set /a 进行赋值

       

    在开启变量延迟情况下,要判断数组 S!n! 的值的情况,

    不可以这么写:

    if !S!n!!==0 echo zero

       

    也不可以这么写:

    if S!n!==0 echo zero

       

    可以利用 set /a等号右边表达式变量不必添加变量符号的规则

    来实现赋值,赋值后即可进行判断

    set /a var=S!n!

    if !var!==0 echo zero

       

    这里,如果不是用 set /a,而仅仅 set var=S!n!,得到的 var 仅仅

    是数组名,同样行不通

       

    当多个变量需要赋统一个值时,也可以用 set /a 来达到简化代码的目

    的:

    @echo off

    set /a A=B=C=D=1

    echo %A% %B% %C% %D%

    pause

       

    sublime中:

       

       

       

    有多个计算式,同样也可以用 set /a 来简化代码:

    @echo off

    set /a A=1,B=2,C=3,D=4

    set /a A+=1,B+=2,C+=3,D+=4

    echo %A% %B% %C% %D%

    pause

       

    sublime中:

       

       

       

       

       

    2、利用 set /p var=%num%<nul 输出数据

       

    如果输出大量的数据,用 echo 命令,每行只输出一个数据,这样

    会浪费大量的显示界面,不符合习惯。将大量数据在同一行输出必

    须用 set 命令。

       

    set /p var=%num%<nul,可以实现对数字连续输出的效果

    如:

    @echo off

    for /l %%i in (1,1,10) do set /p var=%%i<nul

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

    上面的全部数据都揉成一团,不符合习惯,

    可以增加空格隔开数据:

    @echo off

    for /l %%i in (1,1,10) do set /p var=%%i <nul

    pause

       

    sublime中:

       

       

    运行一览:

       

       

       

       

    数字与数字之间是隔开,但是,如果输出的数字位数不一样,

    而间隔都相同,就会造成下面一种可能的结果:

    1 2 3 4 5 6 7 8 9

    10 11 12 13 14 15 16 17 18 19

    即,上下没有对齐,依然不符合书写和阅读习惯

       

       

    实现上下对齐,要借助输出格式:%var:~m,n%

       

    具体实现:先对每个数字前面增加若干空格,然后用

    %var:~m,n% 末尾 k 位输出即可。另外,外加一个计

    数器,每输出 i 位数后换行。

    格式:

    set var= %str%

    set /p print=%var:~-k%<nul

       

    :: %str% 前面加了若干空格

    set var= %str%

    set /p print=%var:~-k%<nul

       

    sublime中:

       

       

       

       

    如:

    @echo off

    setlocal enabledelayedexpansion

    for /l %%i in (11,1,100) do (

    rem 下面的 = %%i 之间隔了那么多空格

    rem 是为了后面的!var:~-7!的输出格式做准备

    rem 意为取 var 后面7个字符

    set var= %%i

    set /p print=!var:~-7! <nul

    set /a num=%%i%%10

    if !num!==0 echo.

    )

    pause

       

       

    sublime中:

       

       

    运行一览:

       

       

       

       

       

    set /p print=%num%<nul 中的 print 并不是必须的,

    可以省略为 set /p =%num%<nul,不过这样写不太规

    范,不建议这么写。

       

       

    再如:

    读入两个数据,输入两个数据之间的所有数。要求:每输出

    10 个数据后换行,并且上下数字要靠右对齐

       

    goto 实现:

    @echo off

    setlocal enabledelayedexpansion

    set /p a=请输入起始数字

    set /p b=请输入最终数字

    set num=1

    :begin

    if !a! leq !b! (

    rem 注意下面 var !a! 之间有若干空格

    set var= !a!

    rem 注意下面 ! <nul 之间有一个空格

    set /p v=!var:~-5! <nul

    set /a a+=1

    set /a num+=1

    if !num! == 11 (

    echo.

    set num=1

    )

    goto begin

    )

    echo.&pause

       

    sublime中:

       

       

    运行一览:

       

       

       

       

    for 实现:

    @echo off

    setlocal enabledelayedexpansion

    set /p a=请输入起始数字

    set /p b=请输入最终数字

    set num=0

    for /l %%i in (%a%,1,%b%) do (

    set var= !a!

    set /p v=!var:~-5! <nul

    set /a a+=1

    set /a num+=1

    set /a tem=!num!%%10

    if !tem!==0 echo.

    )

    echo.&pause

       

    sublime中:

       

       

       

    小结:

    <nul0<nul 的简写,0 句柄是默认的输入句柄,nul空设备

    所以 <nul 表示从空设备获取输入

       

    set /p 执行时会等待用户的输入,<nul 使得 set /p 输入设备为空

    (默认情况下为 0<con,也就是键盘输入 )此时 set /p 就会自动

    终止输入,此处的 <nul 和手动按回车效果一样,只是它不需要人工

    操作。也就是:

    set /p=提示语句<nul

    等同于:

    set /p=提示语句【按回车】

       

    利用这个特性,再加上 set /p 内置的不换行显示提示语句的功能,

    就能够实现不换行显示,不过它有一个缺陷,就是无法显示以等号开

    头的行(而且 win7 下会把开头连续的空格与制表符忽略)

       

       

       

    【made by siwuxie095】

       

       

       

       

       

       

       

  • 相关阅读:
    iOS7上在xib中使用UITableViewController设置背景色bug
    Android 转载一篇.9图片详解文章
    Android 中4种屏幕尺寸
    网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
    防火墙简介
    Makefile有三个非常有用的变量。分别是$@,$^,$
    makefile简单helloworld
    Python异常处理try except
    shell 读取配置文件的方法
    ubuntu 添加开机启动服务
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6368818.html
Copyright © 2020-2023  润新知