Batch入门教程丨第二章:认识变量相关概念

在前两期的学习内容中,我们已经了解了Batch入门教程有关的知识和编程方法,如何编写和运行Windows Batch程序,脚本语言的入门方式等,今天我们将继续深入学习Batch入门教程之认识变量相关概念

前期回顾 

?Batch入门教程丨部署与Hello World(上)

?Batch入门教程丨部署与Hello World(下)

进阶

我们在之前所接触到的三个指令仅仅是Batch中的冰山一角,一些比较重点的指令都会放在本节中进行讲述。在进阶内容中,您将会了解到变量、逻辑判断、调用与传参和函数这几大概念。

在本次发布内容中,我们来了解第一大概念:变量。

变量

变量(Variable),在初中对函数的学习中我们可能接触到了这个名词,当然,如果您还没有接触到也没有关系,您只需要将它理解为“一种可以改变的值”即可。在计算机中,变量的含义会更加清晰,因为它的确是可以变的。

我们如果提到变量,就必定会谈到赋值(Assignment)。这个赋值并不是代数中的赋值(名词),而是一个动宾短语。赋,即赋予,给予,这个词的意思很明显了,就是给予一个值。给予谁值呢?我们就要谈到变量名(Name)了。变量名一般是可以随便取的,但是如果我们想要更好地去分辨,我们最好取一些有意义的名字。

set

set是变量操作最基本的指令,它能够指定一个变量名并给它赋值。下面是一个常见的变量赋值表达式:

set a=1

其中,set为变量操作指令,它是不可缺少的。a是变量名,它的值则是=后的1。那么,=是等号吗?不是。在计算机领域,=从来没有等号的意思,它被称为赋值运算符(Assignment Operator),只要看到它,就代表着左侧与右侧相等,但是它并不表示相等关系。

也就是说,如果我们要表达“a 与 1 相等”,那么我们需要的是a==1而不是 a=1。假设此时a的值为hello,那么我们若执行:

set a=1

 

此时a的值会被彻底改变,变成1。也就是说,a=x任何时候都成立,因为它是用来改变左侧变量名所对应的值的,而a==x仅在a真正与x相等时成立。

经过一系列的纠结和解释,我们最终得到了一个名为a的变量,它的值为1。那么这个时候我们就要想办法来使用它。能不能与之前的echo结合起来呢?

set a=1

echo %a%

得到1。是可以的。在Batch中,您可以用%变量名%的形式来表示一个变量,并且在任何地方都可以用,比如:

set a=set

set b=a

set c=^=

set d=1

set e=%a% %b%%c%%d%

%e%

echo %a%

pause

exit

这个突如其来的奇怪程序也许非常难懂。接下来我们慢慢分析。

首先我们可以看到,我们定义了5个变量,分别叫做a, b, c, d, e。那么您能说出它们的值是多少吗?我相信答案是肯定的,除了c和e。

a的值为set,b的值为a,c的值为=,d的值为1。那么,如果我们一个一个地echo它们呢?

echo %a%

echo %b%

echo %c%

echo %d%

pause

exit

我们得到的结果将是这样的:

这看起来就像是一个指令:

set a=1

这样您也许可以猜到e的值是什么了。没错,e的值就是a, b, c, d的组合。可以注意到,%a%右边有一个空格,其它的都是相连的,这样组合起来也是不会变的。那么把

%a% %b%%c%%d%

 

组合起来,我们就得到了:

set a=1

 

然后下面有一个单行,写着:

%e%

 

这样,在e的值被赋为set a=1后,再把%e% 当作指令执行,我们就相当于是执行了指令:

set a=1

 

随后再echo出a的值,我们得到的是1。

转义字符

为什么%c%的值是=而不是^=?

首先我们观察:

set c=^=

在这里,如果我们去掉了中间的^,那么这就是一个错误的指令,因为==会被识别成判断是否相等的运算符,而右边又是空的,更何况set没有这种用法。

set c==

所以我们需要让cmd知道我们是想让c等于=(等于等于)。于是^的用处有了。它叫做转义符(Escape Character),用来把原本有特殊含义的符号给转义成一般的字符。

转义符的作用很多,您能想到吗?

如果我们想要输出一句话,这句话里包含%a%,但是我们并不想要输出a的值,而仅仅是输出两个百分号和一个a,怎么办?转义符的用处有了。我们可以这样写:

echo %%a%%

这里我们又用到了一个转义符,它叫做“双百分号”,但它只能在使用变量转义的时候起作用。因而:

set c=^=

set c=%%=%%

 

不相等。

^转义符的效用是它后面的1个字符,%%转义符用来代表一个正常没有特殊含义的%。使用%%a%%,我们得到的结果就不是a的值了。我们看一个示例:

set a=1

echo %a%

echo %%a%%

这样,我们得到的结果是:

set /p

set指令有非常多的参数。在本教程中介绍/p和/a两种。首先,set /p属于暂留性指令中的一种,也是用户输入的第二种途径。如果您想要让用户自己来定义变量的值,您将需要用到/p。

set /p a=

含/p参数的set指令,赋值运算符右侧无论是什么,都不会影响到它的值。若我们单单执行set /p a=,我们将得到:

这是一个输入空框,我们可以随意在这里输入东西。例如,我们输入 123456,那么什么也不会发生:

但是如果此时我们调出%a%的值,效果就出现了:

也就是说,我们输入的任何东西都已经被赋入了变量a里。/p参数的用处就在如此。

但是,每一次都是这个输入空框,用户根本不知道输入什么。这样,我们就可以再赋值运算符右侧加上提示文字,来提示用户这是在输入什么。运行如下程序:

其中,this is my passwd是笔者手动输入的部分。

那么,我们结合先前将变量直接当作指令执行的方式,来制造一个假的cmd控制台:

这时,我们输入的值会直接被赋入%command%内,紧接下一行就是直接把变量的值当作指令来处理。也就是说,我们输入一条指令,就会被直接当作指令来处理,从而实现假控制台的效果。

利用这条思路,我们就可以自定义我们自己的控制台了。当然这是后续的内容。

set /p <

多了一个<,意义就完全不一样了。准确来说,这种用法是建立在文件重定向运算符<上的。它的具体用法:

set /p a=<1.txt

左侧没有多大的区别,仍然是变量名,但是右侧则是一个<加上一个文件。严格来讲,这个文件只能是纯文本文件(扩展名随意,只要不是二进制即可)。这条指令的意思是从1.txt读取第一行的所有内容并赋值到%a% 中。

我们不妨直接做个实验:

这样,从文件读取内容也成功了。但是如果有多行文本呢?出于局限性,这个方法只能读取第一行的内容。在后面的学习中,我们会介绍如何读取全部内容,以及如何选择性地读取指定行的内容。

set /a

指定/a参数可以进行数学运算操作。如果set指令拥有/a参数,那么它的赋值运算符后面的变量不需要带上百分号。

例如:

但是前提是赋值运算符后的变量必须为数字。因为/a是专为数学运算而设计的,所以这样能够让计算写作时更加快速。

一个简单的加减乘除程序就可以通过参数/a来实现:

这代表着在/a参数的前提下,赋值运算符后将可以直接写四则运算符号。但是这远远不够。因为批处理的局限性,目前是无法计算超过32位的数字以及任何浮点数的(所以不建议用批处理计算除法)。不过,这样就相当于是实现了计算器的核心功能。

至此,set介绍得就差不多了。接下来我们了解一下环境变量。

环境变量

环境变量(Environment Variable),是指系统已经预先配置好的父进程环境默认设置。简要来讲,就是一些包含您计算机的基本信息的变量,虽然说叫做“变量”,但是实际上如果您的系统没有从底层上发生改变,这些变量的值是不会改变的。

环境变量在批处理的作用非常巨大,可以节省我们编写代码的时间,也能让我们的代码更加适配其它人的电脑。

我们举个例子,众所周知很多人的Windows系统是安装在盘符为C:的存储空间的,因此如果我们在批处理内要对系统盘内的项进行操作,我们必定需要写路径。例如,我们要用上文中提到的set /p指令来读取位于系统盘根目录的1.txt,那么怎么做?(忽略权限)

set /p content=<C:\1.txt

一般我们的思路当然就会是这样的了,但是,您有没有思考过,万一真的有人系统盘不在C盘呢?(实际上这种情况非常普遍)这条指令岂不是失去意义了?这个时候,环境变量就发挥作用了。环境变量可以根据不同的电脑而改变,这就是它“变”的地方。

例如,在Windows中有一个环境变量,叫作%SYSTEMDRIVE%(环境变量不区分大小写),它的字面意思是系统盘符(System Drive Volume),这也是它所代表的。那么我们可以直接在echo指令中输出它,因为它在系统安装的时候就被定义了。

我们得到的是C:,这正是我们系统盘的盘符。

而如果某人的电脑系统盘是E:,那么这个变量的值就会等于E:。利用这个原理,我们就可以适配所有的电脑了,于是把我们的指令修改成:

set /p content=<%SYSTEMDRIVE%\1.txt

这样,这条指令就有了万能性。

环境变量的使用方法基本上就是这样,接下来我们列出一些常用的环境变量:

变量截取与替换

如果我们希望将一个变量分段,只取其中一部分内容,在Batch中是有方法的。

set a=1234567890

echo %a:~0,1%

 

上面的执行结果是1。看吧,这是一个您不认识的变量写法。:~0,1就是变量控制符。一般地,在Batch中,我们对变量截取有以下原则:

%操作变量名:~始, 终%

 

其中,操作变量名很好理解,这是我们要采取截取工作的变量。例如,我们要截取变量a,那么操作变量名就是a。始(from Index),指定从哪一(Index)开始截取,(to Index)指定截取到的位。

在计算机中,位是从0开始的。也就是说,我们日常生活中所表示的1,在这里就是0。观察以下数据:

 

1234567890

请问这组数据中的第一个数字是什么?是1。但是,如果我们要在计算机内表示的话,我们要说它在第0位。以此类推,如果我们要截取变量的前8位,那么我们应当写成:

%a:~0,8%


这行代码代表截取变量a的第一位至第八位。如果我们仿照上例执行:

set a=1234567890

echo %a:~0,8%

我们将得到12345678。这种截取也适用于非0开头。需要注意的是,开头的位必须与我们现实生活中所数的位数少1。例如:

set a=你好啊

echo %a:~1,1%

 

输出的结果是好。这行代码代表从第2位开始,截取1个字符。那么我们就直接截取了第2位本身。如果我们将终改为2,我们得到的结果是 好啊,即从第2位开始,截取了2位。

请您参考如下例子来好好了解一下变量截取:

我们同样可以反过来,从相反方向截取。例如:

set a=3.14

echo %a:~-1%

这种用法里没有始和终的区分。以上例子代表截取a的倒数第一位,我们得到的结果是4。如果我们使用echo %a:~-2%,那么我们截取的是倒数的两位,结果是14。以此类推,当我们使用echo %a:~-n% 的时候,实际上是截取了这个数据的倒数n位(即从倒数第1位一直截取到倒数第n位)。

此外我们还可以结合起来用:

set a=3.14

echo %a:~0,-1%

我们得到的结果是3.1。这行指令代表截取从正数第一位一直到倒数第一位之前的那一位的数据。以此类推,当我们使用echo %a:~b,-c%的时候,实际上是截取了这个变量从正数第a+1位到倒数第|c|+1位的数据。

至于变量替换,相对于变量截取,比较简单。

set a=我好!

echo %a:我=你%

我们得到的结果是你好!。也就是说,%a:A=B即将变量内任何与A完全匹配的内容全部替换成B。

以上是今天与大家分享的内容,如果对你有帮助,记得收藏啊,下期内容我们将继续探讨Batch入门教程中的进阶知识,记得关注哦!

原文地址:https://www.cnblogs.com/ichunqiu/p/10405567.html

时间: 2024-10-03 00:16:54

Batch入门教程丨第二章:认识变量相关概念的相关文章

ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ArcGIS for Desktop是ArcGIS产品线上的桌面端软件产品,为GIS专业人士提供的信息制作和使用的工具.利用ArcGIS for Desktop,你可以实现任何从简单到复杂的GIS任务,包括制图,地理分析,数据编辑,数据管理,可视化和空间处理等.它可以作为三个独立的软件产品购买,每个

Shell编程从入门到精通-第二章.shell变量

二.Shell变量 2.1.什么是变量 在小学的时候我们学过数学方程式,例如:已知x=1,y=x+1那么y等于多少 在上述的题目中x和y被称为未知数,但是在shell编程里它们是变量名,等号右边的1和x+1是变量的内容,(这里"="被称为赋值) 通过上面的介绍可以得出,变量就是用一个固定的字符串代替更多,更复杂的内容,该内容包含变量.路径.字符串等其他的内容,变量是暂时存储数据的地方和标记,所存储的数据存在内存空间中,通过调用内容空间的变量名字就可以取出变量对应的数据.使用变量最大的好

ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第一章_引言 - ArcGIS知乎-新一代ArcGIS问答社区 1 引言 1.1 读者定位 我们假设用户在阅读本指南前应已具备以下知识: · 熟悉Windows的基本操作 · 接触过地理信息系统的概念 · 理解地理数据的特点 1.2 预期效果 我们期望用户在阅读完本指南后对以下知识有一定的了解: · 了解ArcGIS for Desktop的组成与功能 · 熟悉使用ArcGIS for Desktop进行数据编辑.整饰和输出的流程 · 如何使用

【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 By hzp123   at 2014-02-18   265 阅读   0 回复   0.0 希赛币 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们,要知道这才刚刚开始额~~~ 这一节,我们主要来了解CI的文件结构和CI是如何工作的.这一点特别的重要! 一.CI的文件结构:了解CI的文件结构可以帮助我们快速的对CI框架有一个整体的认识,就好像我们去

2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流

知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一个短板. 中文代码示例Python入门教程 4.1 if条件语句 & 4.2 for语句_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili? 中文代码示例Python入门教程 4.3 range函数_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili? 中文代码示例Python入门教程 4.4 b

【C语言探索之旅】 第一部分第四课第二章:变量的世界之变量声明

内容简介 1.课程大纲 2.第一部分第四课第二章:变量的世界之变量声明 3.第一部分第四课第三章预告:变量的世界之显示变量内容 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算符 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理

perl5 第二章 简单变量

第二章 简单变量  by flamephoenix 一.整型 二.浮点数 三.字符串 基本上,简单变量就是一个数据单元,这个单元可以是数字或字符串.一.整型 1.整型   PERL最常用的简单变量,由于其与其它语言基本相同,不再赘述.   例:   $x = 12345;   if (1217 + 116 == 1333) {   # statement block goes here   }  整型的限制:   PERL实际上把整数存在你的计算机中的浮点寄存器中,所以实际上被当作浮点数看待.在

机器学习 Machine Learning(by Andrew Ng)----第二章 单变量线性回归(Linear Regression with One Variable)

第二章 单变量线性回归(Linear Regression with One Variable) <模型表示(Model Representation)>                                                             <代价函数(Cost Function)>                                                          <梯度下降(Gradient Descent)

NIO入门系列之第二章:通道和缓冲区

第2章 通道和缓冲区 2.1  概述 通道和缓冲区是 NIO 中的核心对象,几乎在每一个I/O 操作中都要使用它们. 通道是对原 I/O 包中的流的模拟.到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象.一个 Buffer 实质上是一个容器对象.发送给一个通道的所有对象都必须首先放到缓冲区中:同样地,从通道中读取的任何数据都要读到缓冲区中. 2.2  什么是缓冲区? Buffer 是一个对象,它包含一些要写入或者刚读出的数据.在 NIO 中加入 Buffer 对象,体