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入門教程中的進階知識,記得關注哦!

相關文章
相關標籤/搜索