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中:
小结:
<nul 是 0<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】
posted on 2017-02-05 23:01 siwuxie095 阅读(298) 评论(0) 编辑 收藏 举报