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

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

pause

 
 

sublime中:

 
 

 
 

 
 

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

@echo off

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!的输出格式做准备

个字符

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=请输入最终数字

:begin

if !a! leq !b! (

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

set var= !a!

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

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

if !num! == 11 (

echo.

)

goto begin

)

echo.&pause

 
 

sublime中:

 
 

 
 

运行一览:

 
 

 
 

 
 

 
 

for 实现:

@echo off

setlocal enabledelayedexpansion

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

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

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

set var= !a!

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

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】

 
 

 
 

 
 

 
 

 
 

 
 

 
 

set 续3的更多相关文章

  1. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  2. [.NET] C# 知识回顾 - 委托 delegate (续)

    C# 知识回顾 - 委托 delegate (续) [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/6046171.html 序 上篇<C# 知识回 ...

  3. iOS 开发者账号到期续费流程

    1.登录developer.apple.com,查看到期时间 2.到期提醒通知,点击Renew Membership续费(一般提前一个月提醒续费) 3.个人开发者账号续费需要支付 688人民币/年(9 ...

  4. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

  5. CI-持续集成(1)-软件工业“流水线”概述

    CI-持续集成(1)-软件工业“流水线”概述 1   概述 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次, ...

  6. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  7. [译]Godot系列教程三 - 场景实例化(续)

    场景实例化(续) 要点 场景实例化带来很多便利的用法,总体来说有: 将场景细分,更便于管理 相对于某些引擎中的Prefab组件更灵活,并且在许多方面更强大 是一种设计更复杂的游戏流程甚至UI的方式 这 ...

  8. 【小白的CFD之旅】13 敲门实例【续3】

    接上文[小白的CFD之旅]12 敲门实例[续2] 4 Results4.1 计算监测图形4.2 Graphics4.2.1 壁面温度分布4.2.2 创建截面4.2.3 显示截面物理量4.2.4 Pat ...

  9. 【小白的CFD之旅】12 敲门实例【续2】

    接上文[小白的CFD之旅]敲门实例[续] 主要内容 3 Solution3.1 Solution Methods3.2 Solution Controls3.3 Monitors3.4 Report ...

  10. jquery实现简单瀑布流布局(续):图片懒加载

    # jquery实现简单瀑布流布局(续):图片懒加载 这篇文章是jquery实现简单瀑布流布局思想的小小扩展.代码基于前作的代码继续完善. 图片懒加载就是符合某些条件时才触发图片的加载.最常见的具体表 ...

随机推荐

  1. 一个简单的观察者模式的JS实现

    这不是原创文章,主要是写给自己看的.原文比较详细容易让人,我提取最简单最好理解的部分,便于我以后用到.参考http://www.cnblogs.com/TomXu/archive/2012/03/02 ...

  2. 各开源 bbs 程序比较

    主要是集中在 php 开源轻巧的程序. 搜索到一个逼乎的一个帖子:https://www.zhihu.com/question/20655704 ,顺藤摸瓜 下. carbon forum 第一个测试 ...

  3. Zabbix proxy 3.2安装部署

    zabbix proxy 前提环境: CentOS 6 LNMP(php) 版本:Zabbix-3.2.3 proxy安装 yum install -y net-snmp \ net-snmp-dev ...

  4. 20155315 2016-2017-2 《Java程序设计》第八周学习总结

    教材学习内容总结 第14章 NIO与NIO2 1.认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以让你设定缓冲区(Buffer)容量,在缓冲区中对感兴趣的数据区块进 ...

  5. UOJ22. 【UR #1】外星人【DP】【思维】

    LINK 题目大意 给你一个序列和一个值x 问你用某种方式对序列安排顺序之后一次对x取mod膜的最大值和方案数 首先发现一个性质 一个数之后所有比它大的数都没有贡献 考虑怎么利用这个性质? 就可以从小 ...

  6. 解决navicat连接不上mysql服务器

    设置mysql密码 如果mysql用户密码为空,需要设置后第三方mysql操作工具才可以连接 进入数据库:mysql -uroot -p use mysql; update user set pass ...

  7. 使用 Lombok 简化项目中无谓的Java代码

    在写使用Java时,难免会有一些模板代码要写,不然get/set,toString, hashCode, close 资源,定义构造函数等等.代码会显得很冗余,很长.Lombok项目可以是我们摆脱这些 ...

  8. 【转】Java transient关键字使用小记

    哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transi ...

  9. Bootstrap-Other:可视化布局

    ylbtech-Bootstrap-Other:可视化布局 1.返回顶部 1. 2. 2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部 1. http://www.runoob.co ...

  10. 1021 docker初识

    docker与虚拟机相比,没有虚拟化内核,转而使用宿主机的内核.因此docker更轻更快 docker缺点:后端兼容性测试需求.把软件安装在不同的操作系统上进行测试,观察软件运行是否良好. 不能用do ...