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

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

前期回顾 编程

 

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

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

 

进阶ui

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

 

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

 

变量htm

变量(Variable),在初中对函数的学习中咱们可能接触到了这个名词,固然,若是您尚未接触到也没有关系,您只须要将它理解为“一种能够改变的值”便可。在计算机中,变量的含义会更加清晰,由于它的确是能够变的。blog

 

咱们若是提到变量,就一定会谈到赋值(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入门教程中的进阶知识,记得关注哦!

相关文章
相关标签/搜索