bat文件if-for語法

BAT語句結構ide

  相似於C語言,批處理也有它的語句結構。批處理的語句結構主要有選擇結構(if語句)、循環結構(for語句)等。 spa

if語句(選擇結構)token

  if語句實現條件判斷,包括字符串比較、存在判斷、定義判斷等。經過條件判斷,if語句便可以實現選擇功能。 ip

  一、字符串比較 內存

  if語句僅可以對兩個字符(串)是否相同、前後順序進行判斷等。其命令格式爲: ci

  IF [not] string1 compare-op string2 command1 [else command2] 文檔

  其中,比較操做符compare-op有如下幾類: 字符串

  == - 等於 string

  EQU - 等於 it

  NEQ - 不等於

  LSS - 小於

  LEQ - 小於或等於

  GTR - 大於

  GEQ - 大於或等於

  選擇開關/i則不區分字符串大小寫;選擇not項,則對判斷結果進行邏輯非。

  字符串比較示例:

  ===============================================

  @echo off

  set str1=abcd1233

  set str2=ABCD1234

  if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!)

  if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2)

  echo.

  set /p choice=是否顯示當前時間?(y/n)

  if /i not %choice% EQU n echo 當前時間是:%date% %time%

  pause>nul

  ===============================================

  對於最後一個if判斷,當咱們輸入n或N時的效果是同樣的,都不會顯示時間。若是咱們取消開關/i,則輸入N時,依舊會顯示時間。

  另外請注意一下幾個細節:1-echo str1^<str2和echo str1^>=str2;2-echo.。

  二、存在判斷

  存在判斷的功能是判斷文件或文件夾是否存在。其命令格式爲:

  IF [NOT] EXIST filename command1 [else command2]

  ===============================================

  @echo off

  if exist %0 echo 文件%0是存在的!

  if not exist %~df0 (

  echo 文件夾%~df0不存在!

  ) else echo 文件夾%~df0存在!

  pause>nul

  ===============================================

  這裏注意幾個地方:

  1-存在判斷既能夠判斷文件也能夠判斷文件夾;

  2-%0即表明該批處理的全稱(包括驅動器盤符、路徑、文件名和擴展類型);

  3-%~df0是對%0的修正,只保留了其驅動器盤符和路徑,詳情請參考for /?,屬高級批處理範疇;

  4-注意if語句的多行書寫,多行書寫要求command1的左括號必須和if在同一行、else必須和command1的右括號同行、command2的左括號必須與else同行、command1和command2均可以有任意多行,即command能夠是命令集。

  三、定義判斷

  定義判斷的功能是判斷變量是否存在,便是否已被定義。其命令格式爲:

  IF [not] DEFINED variable command1 [else command2]

  存在判斷舉例:

  ===============================================

  @echo off

  set var=111

  if defined var (echo var=%var%) else echo var還沒有定義!

  set var=

  if defined var (echo var=%var%) else echo var還沒有定義!

  pause>nul

  ===============================================

  對比可知,"set var="能夠取消變量,收回變量所佔據的內存空間。

for語句(循環結構)

  for語句能夠實現相似於C語言裏面的循環結構,固然for語句的功能要更強大一點,經過不一樣的開關能夠實現更多的功能。for語句有多個開關,不一樣開關將會實現不一樣的功能。

一、無開關

  無開關的for語句可以對設定的範圍內進行循環,是最基本的for循環語句。其命令格式爲:

  FOR %%variable IN (set) DO command

  其中,%%variable是批處理程序裏面的書寫格式,在DOS中書寫爲%variable,即只有一個百分號(%);set就是須要咱們設定的循環範圍,相似於C語言裏面的循環變量;do後面的command就是循環所執行的命令,即循環體。

  無開關for語句舉例:

  ===============================================

  @echo off

  for %%i in (a,"b c",d) do echo %%i

  pause>nul

  ===============================================

二、開關/L

 含開關/L的for語句,能夠根據set裏面的設置進行循環,從而實現對循環次數的直接控制。其命令格式爲:

  FOR /L %%variable IN (start,step,end) DO command

  其中,start爲開始計數的初始值,step爲每次遞增的值,end爲結束值。當end小於start時,step須要設置爲負數。

  含開關/L的for語句舉例(建立5個文件夾):

  ===============================================

  @echo off

  for /l %%i in (1,2,10) do md %%i

  pause

  ===============================================

  上例將新建5個文件夾,文件夾名稱依次爲一、三、五、七、9。能夠發現,%%i的結束值並不是end的值10,而是不大於end的一個數。

三、開關/F

  含開關/F的for語句具備最強大的功能,它可以對字符串進行操做,也可以對命令的返回值進行操做,還能夠訪問硬盤上的ASCII碼文件,好比txt文檔等。其命令格式爲:

  FOR /F ["options"] %%variable IN (set) DO command

  其中,set爲("string"、'command'、file-set)中的一個;options是(eol=c、skip=n、delims=xxx、tokens=x,y,m-n、usebackq)中的一個或多個的組合。各選項的意義參見for /f。通常狀況下,使用較多的是skip、tokens、delims三個選項。

  含開關/F的for語句舉例:

  ===============================================

  @echo off

  echo **No Options:

  for /f %%a in ("1,2,10") do echo a=%%a

  echo **Options tokens ^& delims:

  for /f "tokens=1-3 delims=," %%a in ("1,2,10") do echo a=%%a b=%%b c=%%c

  pause

  ===============================================

  @echo off

  echo 本文件夾裏面的文件有:

  for /f "skip=5 tokens=3* delims= " %%a in ('dir') do (

  if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b

  )

  pause

  ===============================================

  @echo off

  echo 本文件夾裏面的文件有:

  dir>c:\file.txt

  for /f "skip=5 tokens=3* delims= " %%a in (c:\file.txt) do (

  if not "%%a"=="<DIR>" if not "%%b"=="字節" if not "%%b"=="可用字節" echo %%b

  )

  del c:\file.txt

  pause

  ===============================================

  對於後面的兩個例子,其中options裏面的delims= 是能夠刪除的,由於只要添加了/F開關係統就將delims的值默認爲空格。

符號字符串中的最後一個字符星號,

  那麼額外的變量將在最後一個符號解析以後

  分配並接受行的保留文本。本例中也能夠改成4,不過文件名中有空格的文件,只能顯示空格之前部分

同時咱們也看到了,for語句的do後面的command也是能夠分行的,只須要保證command的左括號和do在同一行就能夠了。

四、開關/D或/R

  含開關/D或/R的for語句是與目錄或文件有關的命令,通常狀況下不多使用。含開關/R的命令有時候被用於經過遍歷文件夾來查找某一個文件或文件夾,故而列舉此例。

  含開關/R的for語句舉例(文件夾遍歷):

  ===============================================

  @echo off

  setlocal enabledelayedexpansion

  FOR /R d: %%i IN (.) DO (

  set dd=%%i

  set "dd=!dd:~0,-1!"

  echo !dd!

  )

  pause

  exit

  ===============================================

  上例便可以羅列出D盤下的全部文件夾,其速度要比命令"tree d:"慢多了,不過其返回結果的實用性則遠遠超過了tree命令。

  通常狀況下咱們不推薦經過遍歷文件夾來查找文件,特別是在查找某些程序(好比QQ.exe)的位置時。推薦經過reg命令查找註冊表來查找QQ的路徑,以保證查找效率。

  上例中也出現了幾個新面孔,如setlocal、感嘆號等。其中,感嘆號其實就是變量百分號(%)的強化版。之因此要用!而不用%,是由於在for循環中,當一個變量被屢次賦值時,%dd%所獲取的僅僅是dd第一次被賦予的值;要想刷新dd的值,就必須首先經過命令"setlocal enabledelayedexpansion"來開啓延遲變量開關,而後用!dd!來獲取dd的值。

  for語句是批處理裏面功能最強大、使用最廣泛卻又最難掌握的一套命令,這也是批處理菜鳥和批處理高手最明顯的一個分水嶺,一旦掌握了這套命令,那麼你就離批處理達人不遠了!

相關文章
相關標籤/搜索