欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

BAT腳本之核心技巧:詳解IF語(yǔ)句的使用方法與實(shí)例

 更新時(shí)間:2024年02月18日 08:51:46   作者:sanqima  
如果你想要在Bat編程語(yǔ)言中使用條件語(yǔ)句,那么這篇指南將會(huì)為你介紹如何使用IF語(yǔ)句,?IF語(yǔ)句是任何編程語(yǔ)言中都不可或缺的一部分?-?它使您能夠基于特定的條件執(zhí)行某些代碼塊或跳過(guò)它們,在這篇簡(jiǎn)短的指南里,我們將向你展示如何在Bat中編寫(xiě)IF語(yǔ)句并給出一些示例來(lái)說(shuō)明其用法

例如,刪除“C:\Documents and Settings\Administrator\桌面\T1\txt\批處理實(shí)驗(yàn)\unit1”里的a.txt文件,使用if的代碼如下:

@echo off
if exist "C:\Documents and Settings\Administrator\桌面\T1\txt\批處理實(shí)驗(yàn)\unit1\a.txt" (
  echo file is find!
del "C:\Documents and Settings\Administrator\桌面\T1\txt\批處理實(shí)驗(yàn)\unit1\a.txt"
) else (
  echo file is not found!
)
pause>nul 

將上述代碼保存為if_del.bat

1.if——條件判斷(分支)語(yǔ)句

   “if”語(yǔ)句是批處理中的條件分支語(yǔ)句,表示的意思就是“如果...則...否則...”,大多用在批處理程序中的條件處理部分。“if”語(yǔ)句在批處理中使用的是比較廣泛的,例如要查看某個(gè)文件,則首先要確定該文件存在才可以查看,否則MS-DOS會(huì)拋出錯(cuò)誤信息,這個(gè)時(shí)候就可以使用“if”語(yǔ)句進(jìn)行判斷。“if”命令語(yǔ)句是通過(guò)條件成立與否來(lái)決定語(yǔ)句的執(zhí)行,這里的條件成立和條件不成立可以理解為“true”和“false”,但是批處理中不存在這兩個(gè)常量。“if”語(yǔ)句所表達(dá)的意思是只有當(dāng)條件成立時(shí)才會(huì)執(zhí)行指定的命令語(yǔ)句,主要有以下幾種用法。

1.判斷信息是否相等(“==”)

   “if”命令語(yǔ)句就是用于條件的判斷,然而由于批處理腳本本身比較弱化,所以初始的MS-DOS只能支持信息相等的比較,也就是只支持“==”操作符。用于比較字符串與字符串、變量與變量、變量與字符串之間是否相等,如果相等則表示條件成立。用法如下:

if [not] 信息比較表達(dá)式 (

   命令行1

) else (

   命令行2

)

這里的“信息比較表達(dá)式”的格式為“字符串1==字符串2”或“變量1==變量2”或“變量==字符串”的形式,也即是說(shuō)只能使用“==”進(jìn)行字符串或變量之間的比較,上面的“not”表示相反操作,不做多的解釋?zhuān)瑏?lái)看下面的例子:

@ echo  off
if  abc==ABC (
    echo  abc euqal ABC
)  else  (
    echo  abc not euqal ABC
)
pause>nul

保存為批處理文件,執(zhí)行既可以看到效果,可以自行修改,添加“not”試試。

2.判斷錯(cuò)誤級(jí)別信息

   錯(cuò)誤級(jí)別“errorlevel”是MS-DOS的內(nèi)置環(huán)境變量,在上面已經(jīng)介紹過(guò),主要用于保存上一條命令語(yǔ)句是否執(zhí)行成功,成功則返回0,失敗或錯(cuò)誤則返回相對(duì)應(yīng)的錯(cuò)誤級(jí)別碼。然而“errorlevel”是內(nèi)置環(huán)境變量,所以可以使用下面的方式判斷:

@ echo  off
if  %errorlevel%==0 (
   echo  success!
)  else  (
   echo  failed!
)
pause>nul

然而“if”語(yǔ)句提供了一種特殊的錯(cuò)誤級(jí)別判斷方式,如下:

if [not] errorlevel number (

   命令行1

) else (

   命令行2

)

這種方式并不是使用變量的方式進(jìn)行引用,而是作為關(guān)鍵字使用,“number”表示一個(gè)錯(cuò)誤級(jí)別碼,“not”表示相反操作,不做多的解釋。使用這種方式比較簡(jiǎn)潔。

3.判斷文件是否存在

   在上面已經(jīng)提到關(guān)于文件是否存在的判斷,“if”語(yǔ)句提供了一種特殊的文件判斷方案,用法如下:

if [not] exist filepath (

   命令行1

) else (

   命令行2

)

其中“exist”是關(guān)鍵字表示“存在”,“filepath”表示要判斷的文件路徑,如果檢查到指定的文件存在則執(zhí)行對(duì)應(yīng)的命令塊,“not”表示相反操作,不做多的解釋。多說(shuō)無(wú)益,直接看例子:

 @ echo  off
if  exist C:\a.txt (
   echo  file  is  find !
del C:\a.txt
)  else  (
   echo  file  is not found!
)
pause>nul

上面的例子表示如果檢查到C盤(pán)存在“a.txt”文件則刪除該文件,保存為批處理文件試試即可。

4.判斷MS-DOS擴(kuò)展版本號(hào)(擴(kuò)展用法)

   MS-DOS擴(kuò)展版本號(hào)“cmdextversion”是MS-DOS的內(nèi)置環(huán)境變量,在上面已經(jīng)介紹過(guò),當(dāng)在使用某個(gè)新擴(kuò)展特征時(shí)可以首先判斷版本號(hào)是否對(duì)應(yīng),不過(guò)該用法需要在啟用命令擴(kuò)展之后才能使用,而命令擴(kuò)展默認(rèn)是啟用的,進(jìn)行擴(kuò)展版本號(hào)判斷是“if”語(yǔ)句的擴(kuò)展用法。用法如下:

if cmdextversion number (

   命令行1

) else (

   命令行2

)

意思是說(shuō)當(dāng)當(dāng)前批處理擴(kuò)展版本號(hào)與給定的“number”值對(duì)應(yīng)時(shí)執(zhí)行“語(yǔ)句1”否則執(zhí)行“語(yǔ)句2”,大多數(shù)情況下不會(huì)使用這個(gè)命令語(yǔ)句。

5.判斷變量是否存在(擴(kuò)展用法)

   變量是否存在的檢查是“if”語(yǔ)句的擴(kuò)展用法,用法比較廣,可以判斷變量是否被聲明,然后在斟酌使用,不過(guò)該用法需要在啟用命令擴(kuò)展之后才能使用,而命令擴(kuò)展默認(rèn)是啟用的,用法比較類(lèi)似文件是否存在的判斷用法,如下:

if defined 變量名 (

   命令行1

) else (

   命令行2

)

當(dāng)變量被聲明定義后“defined 變量名”才會(huì)成立,否則不會(huì)成立,具體實(shí)例可以自行編寫(xiě)。

6.信息比較運(yùn)算(擴(kuò)展用法)

   上面介紹過(guò)“if”默認(rèn)情況下只支持相等比較運(yùn)算,然后后續(xù)考慮則對(duì)“if”語(yǔ)句進(jìn)行了命令擴(kuò)展,使其可以支持多種比較運(yùn)算操作,不過(guò)該用法需要在啟用命令擴(kuò)展之后才能使用,而命令擴(kuò)展默認(rèn)是啟用的。用法與“if”相等比較運(yùn)算的用法一致,如下:

if [/i] 操作數(shù)1 比較運(yùn)算符 操作數(shù)2 (

   命令行1

) else (

   命令行2

)

其中操作數(shù)可以是字符串也可以是數(shù)值,同時(shí)還可以是變量;“/I”選項(xiàng)用于開(kāi)啟比較過(guò)程中字符串大小寫(xiě)忽略功能;在命令擴(kuò)展下支持的比較運(yùn)算符有:“equ(等于)”、“neq(不等于)”、“lss(小于)”、“leq(小于等于)”、“gtr(大于)”、“geq(大于等于)”六種,其中“lss”、“leq”、“gtr”和“geq”四種比較操作符主要用于對(duì)數(shù)值進(jìn)行比較,當(dāng)參與比較的字符串是字符串時(shí),將被轉(zhuǎn)換為對(duì)于的ASCII碼進(jìn)行比較;而“equ”和“neq”既可以比較數(shù)值也可以比較字符串。來(lái)看下面的例子:

@ echo  off
set  var1=123
set  var2=abc
set  var3=12
if  /i  %var2% equ ABC (
   if  %var1% geq %var3% (
     echo  %var1%^>=%var3%
   )  else  (
     echo  %var1%^<%var3%
   )
)  else  (
   echo  %var2%不等于ABC
)
pause>nul

上面的例子可以說(shuō)明“/I”的用法,以及其他命令擴(kuò)展下的操作符用法,保存為批處理文件即可執(zhí)行查看效果。
   綜上所述,特別提示以上的“if”語(yǔ)句中的“else”子句是可省略的,“else”只是起到多分支的作用,表示當(dāng)條件不成立時(shí)執(zhí)行的處理過(guò)程,不必要時(shí)可以去掉。關(guān)于“()”表示范圍,用于表示多條語(yǔ)句執(zhí)行的語(yǔ)句塊(批處理中的每一條語(yǔ)句都是以換行符作為結(jié)束符號(hào)的),也就是說(shuō)當(dāng)條件成立是會(huì)執(zhí)行“if”后“()”內(nèi)的所有語(yǔ)句,當(dāng)只有一條語(yǔ)句需要執(zhí)行時(shí)可以省略“()”,特別需要注意的是省略“()”時(shí),命令和“if”語(yǔ)句必須寫(xiě)在一行,當(dāng)有“else”子句時(shí)必須使用“()”?!拘√崾荆鹤⒁?ldquo;()”與關(guān)鍵字之間的空格】

2.setlocal/endlocal——啟動(dòng)/結(jié)束延遲環(huán)境變量擴(kuò)展功能

   前面已經(jīng)介紹過(guò)變量的引用原理,就是查找變量名對(duì)應(yīng)的值來(lái)替換“%變量名%”字符串,從而達(dá)到變量引用的效果,這個(gè)過(guò)程也稱(chēng)之為變量擴(kuò)展過(guò)程,這種過(guò)程可用于處理基礎(chǔ)的普通的變量,然而我們來(lái)看看下面的例子:

@ echo  off
set  var=before
if  "%var%"  ==  "before"  (
   set  var=after
   if  "%var%"  ==  "after"  (
     echo  重置var的值成功[var=%var%]
   )  else  (
     echo  重置var的值失敗[var=%var%]
   )
)
echo  var=%var%
pause>nul

按照正常的執(zhí)行流程可以推斷出結(jié)果為“重置var的值成功[var=after]”,然而真實(shí)執(zhí)行的結(jié)果并不是我們想象的,保存為批處理文件并執(zhí)行輸出的結(jié)果為“重置var的值失敗[var=before]”。我們來(lái)看看為什么為出現(xiàn)這種情況?首先聲明了變量var的值為before,緊接著為一個(gè)“if”語(yǔ)句,又在“if”語(yǔ)句中對(duì)變量var進(jìn)行重新賦值,然后在進(jìn)行判斷,然而該程序在解釋執(zhí)行的過(guò)程中,將“if”語(yǔ)句以及其內(nèi)的“set”命令和“if”語(yǔ)句作為一整條語(yǔ)句進(jìn)行解釋的,當(dāng)遇到“%var%”時(shí)會(huì)自動(dòng)查找“var”的值替換當(dāng)前語(yǔ)句,也就是整個(gè)外層“if”語(yǔ)句中的所有“%var%”字符串,因此內(nèi)部的“if”判斷條件中的“%var%”被替換成了“before”,所以永遠(yuǎn)都不會(huì)與“after”相等。這就是變量擴(kuò)展的過(guò)程,那么外層“if”語(yǔ)句中的“set var=after”是否執(zhí)行了呢?答案是肯定的,通過(guò)在程序末尾追加“echo var=%var%”可以看出。

   通過(guò)上面的例子,可以得出一個(gè)結(jié)論就是批處理中的默認(rèn)變量替換過(guò)程值針對(duì)一整條語(yǔ)句的,也就是說(shuō)如果一整條語(yǔ)句中某個(gè)地方有變量的引用,則將會(huì)影響到該條語(yǔ)句中的所有變量引用,同一條語(yǔ)句中的所有變量引用會(huì)在同一時(shí)刻被替換為該變量對(duì)應(yīng)的值。通俗的說(shuō),就是默認(rèn)情況下,一條語(yǔ)句中的變量的值是固定的。

   針對(duì)這個(gè)現(xiàn)象,批處理提出了延遲環(huán)境變量(簡(jiǎn)稱(chēng)延遲變量)的概念,主要用于對(duì)變量進(jìn)行擴(kuò)展,彌補(bǔ)普通變量的應(yīng)用過(guò)程中的不足,通過(guò)延遲環(huán)境變量可以實(shí)現(xiàn)在一整條語(yǔ)句中改變變量的值。也就是說(shuō)可以通過(guò)延遲環(huán)境變量概念來(lái)實(shí)現(xiàn)子句內(nèi)部的變量聲明、定義和賦值等操作。批處理中給出了“setlocal”和“endlocal”命令來(lái)實(shí)現(xiàn)延遲變量擴(kuò)展功能的開(kāi)啟和關(guān)閉操作,來(lái)看看兩個(gè)命令的用法:

setlocal enableExtensions | disableExtensions

setlocal enableDelayedExpansion | disableDelayedExpansion

endlocal

“setlocal”命令有兩種用法,第一種用法用于啟動(dòng)(enableExtensions)或者停用(disableExtensions)命令處理器擴(kuò)展名功能,這個(gè)用法主要用于管理MS-DOS解釋器的命令擴(kuò)展功能,默認(rèn)是開(kāi)啟的,一般很少用到;第二種用法就是現(xiàn)在介紹的用于啟動(dòng)(enableDelayedExpansion)或者停用(disableDelayedExpansion)延遲環(huán)境變量擴(kuò)展功能,默認(rèn)是停用的。“endlocal”命令用法比較簡(jiǎn)單,就一個(gè)單一的命令行,該命令行主要用于停用延遲環(huán)境變量擴(kuò)展功能,命令執(zhí)行后將會(huì)還原當(dāng)前批處理的擴(kuò)展功能為默認(rèn)值,所做的環(huán)境變量的改動(dòng)不在局限于當(dāng)前批處理文件;實(shí)質(zhì)上“endlocal”比較特殊,是可以省略的,也不是一定要與“setlocal”成對(duì)出現(xiàn),當(dāng)一個(gè)或多個(gè)“setlocal”沒(méi)有強(qiáng)制使用“endlocal”時(shí)會(huì)在批處理文件的末尾自動(dòng)執(zhí)行“endlocal”命令來(lái)還原初始默認(rèn)設(shè)置。

   當(dāng)開(kāi)啟延遲環(huán)境變量的擴(kuò)展功能后,對(duì)環(huán)境變量的修改和引用將會(huì)擴(kuò)展到整個(gè)批處理程序中。下面來(lái)看看如何使用延遲環(huán)境變量的擴(kuò)展功能?現(xiàn)在使用延遲環(huán)境變量擴(kuò)展功能解決上面遇到的問(wèn)題,代碼如下:

@ echo  off
setlocal enableDelayedExpansion
set  var=before
if  "!var!"  ==  "before"  (
   set  var=after
   if  "!var!"  ==  "after"  (
     echo  重置var的值成功[var=!var!]
   )  else  (
     echo  重置var的值失敗[var=!var!]
   )
)
pause>nul

在這段代碼中,首先使用“setlocal enableDelayedExpansion”語(yǔ)句啟用了延遲環(huán)境變量擴(kuò)展功能,保存為批處理文件并執(zhí)行的結(jié)果則為預(yù)想的效果“重置var的值成功[var=after]”,代碼中并沒(méi)有強(qiáng)制使用“endlocal”語(yǔ)句停用延遲環(huán)境變量擴(kuò)展功能,但是MS-DOS解釋器會(huì)在程序的末尾,也就是“pause>nul”語(yǔ)句之后自動(dòng)調(diào)用“endlocal”命令重置MS-DOS環(huán)境默認(rèn)值。

   但是上面的代碼與之前的代碼還有一處細(xì)小的區(qū)別,就是這里使用了“!xxx!”的方式來(lái)引用變量。然而為什么要使用這種方式呢?“%xxx%”的方式是否可行?答案可想而知“%xxx%”的方式肯定不可行。之前已經(jīng)介紹過(guò)“%xxx%”方式的變量替換原則,當(dāng)在一條命令的整體語(yǔ)句中時(shí),如果首次遇到“%xxx%”的字符串,則會(huì)自動(dòng)查找并替換該整條語(yǔ)句中的所有“%xxx%”字符串為指定變量的值;正是這個(gè)原因,所以提出了延遲環(huán)境變量擴(kuò)展的概念,延遲環(huán)境變量擴(kuò)展就是為了解決整條語(yǔ)句中所有變量被替換的問(wèn)題,然而在提出延遲環(huán)境變量擴(kuò)展概念的同時(shí)擴(kuò)展了“!xxx!”的變量引用方式,主要用于區(qū)別默認(rèn)的“%xxx%”變量引用方式,而且“!xxx!”變量引用方式只能在延遲環(huán)境變量擴(kuò)展功能開(kāi)啟的環(huán)境中才能被解析。

   來(lái)總結(jié)以下,關(guān)于延遲環(huán)境變量擴(kuò)展的用法,延遲環(huán)境變量擴(kuò)展功能主要用于解決像“if”、“for”以及各種復(fù)合語(yǔ)句(使用邏輯運(yùn)算符拼接的語(yǔ)句)等中,用于在語(yǔ)句內(nèi)部引用修改后的變量,因?yàn)槟J(rèn)情況下語(yǔ)句中的變量是被提前替換的,使用延遲環(huán)境變量則可以延遲替換過(guò)程到解析到該變量時(shí);使用“setlocal enableDelayedExpansion”語(yǔ)句開(kāi)啟延遲環(huán)境變量擴(kuò)展功能后,只能使用“!xxx!”的方式引用變量,表示該變量將被作為延遲環(huán)境變量進(jìn)行處理,如果使用“%xxx%”方式引用將繼續(xù)作為普通變量處理;開(kāi)啟延遲環(huán)境變量擴(kuò)展功能后可以在必要的時(shí)候強(qiáng)制使用“endlocal”或“setlocal disableExtensions”語(yǔ)句停用該功能,默認(rèn)在程序結(jié)尾自動(dòng)調(diào)用“endlocal”語(yǔ)句進(jìn)行重置。

到此這篇關(guān)于BAT腳本之核心技巧:詳解IF語(yǔ)句的使用方法與實(shí)例的文章就介紹到這了,更多相關(guān)bat中if語(yǔ)句的用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論