久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

bat中if語句的用法例句

 BorisBlog 2019-01-22

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

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

  將上述代碼保存為if_del.bat,,效果如下:


2.if——條件判斷(分支)語句

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

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

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

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

   命令行1

) else (

   命令行2

)

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

1
2
3
4
5
6
7
@echo off
if abc==ABC (
   echo abc euqal ABC
else (
   echo abc not euqal ABC
)
pause>nul

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

2.判斷錯誤級別信息

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

1
2
3
4
5
6
7
@echo off
if %errorlevel%==0 (
  echo success!
else (
  echo failed!
)
pause>nul

然而“if”語句提供了一種特殊的錯誤級別判斷方式,,如下:

if [not] errorlevel number (

   命令行1

) else (

   命令行2

)

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

3.判斷文件是否存在

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

if [not] exist filepath (

   命令行1

) else (

   命令行2

)

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

1
2
3
4
5
6
7
8
@echo off
if exist C:\a.txt (
  echo file is find!
del C:\a.txt
else (
  echo file is not found!
)
pause>nul

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

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

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

if cmdextversion number (

   命令行1

) else (

   命令行2

)

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

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

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

if defined 變量名 (

   命令行1

) else (

   命令行2

)

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

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

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

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

   命令行1

) else (

   命令行2

)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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

上面的例子可以說明“/I”的用法,以及其他命令擴(kuò)展下的操作符用法,,保存為批處理文件即可執(zhí)行查看效果,。

   綜上所述,特別提示以上的“if”語句中的“else”子句是可省略的,,“else”只是起到多分支的作用,,表示當(dāng)條件不成立時執(zhí)行的處理過程,不必要時可以去掉,。關(guān)于“()”表示范圍,,用于表示多條語句執(zhí)行的語句塊(批處理中的每一條語句都是以換行符作為結(jié)束符號的),也就是說當(dāng)條件成立是會執(zhí)行“if”后“()”內(nèi)的所有語句,,當(dāng)只有一條語句需要執(zhí)行時可以省略“()”,,特別需要注意的是省略“()”時,命令和“if”語句必須寫在一行,,當(dāng)有“else”子句時必須使用“()”?!拘√崾荆鹤⒁狻埃ǎ迸c關(guān)鍵字之間的空格】

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

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

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

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

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

setlocal enableExtensions | disableExtensions

setlocal enableDelayedExpansion | disableDelayedExpansion

endlocal

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

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

1
2
3
4
5
6
7
8
9
10
11
12
@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”語句啟用了延遲環(huán)境變量擴(kuò)展功能,,保存為批處理文件并執(zhí)行的結(jié)果則為預(yù)想的效果“重置var的值成功[var=after]”,,代碼中并沒有強(qiáng)制使用“endlocal”語句停用延遲環(huán)境變量擴(kuò)展功能,但是MS-DOS解釋器會在程序的末尾,,也就是“pause>nul”語句之后自動調(diào)用“endlocal”命令重置MS-DOS環(huán)境默認(rèn)值,。

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

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多