set 续3

    xiaoxiao2021-03-26  32

    -------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) doset /p var=%%i<nul

    pause

      

    sublime中:

      

      

    运行一览:

      

      

      

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

    可以增加空格隔开数据:

    @echo off

    for /l %%i in (1,1,10) doset /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%

    if !num!==0echo.

    )

    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!%

    if !tem!==0echo.

    )

    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】

      

      

      

      

      

      

      

    转载请注明原文地址: https://ju.6miu.com/read-662586.html

    最新回复(0)