懵懵燈燈的BLOG

          寒夜孤燈點點星

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            56 隨筆 :: 10 文章 :: 22 評論 :: 0 Trackbacks

          控制結構

          ?

          1.?????? 如何定義行號?

          :<label>

          ?????? 可以定義任意長度的 label 并且中間允許有空格,但是 MS-DOS 只區分其中的前 8 個字符,以冒號開頭的腳本文件行不被處理。

          行號同樣不區分大小寫。行號的冒號前面可以有空白符號。

          ?

          2.?????? 如何使用 GOTO 語句?

          GOTO <label>

          <label> 一般為所定義的行號,如果命令擴展被允許( default )也可以用命令跳轉到文件末尾:

          GOTO :EOF

          ????????????? :EOF 不區分大小寫

          ????????????? 如果命令找不到需要跳轉的行好位置,則顯示:

          Label not found

          3.?????? 如何使用 For 循環語句?

          FOR {%<var>|%%<var>} IN (<set>) DO <command>

          FOR 語句可以在命令行和腳本文件中使用,在腳本文件中使用,變量定義和引用用 %% ;在命令行中使用,變量定義和引用用 % 。變量名是大小寫敏感的,并且可以用除了 0 9 任意的單個字符(不包含元符號),這點比較特殊。 DO 后面是需要執行的語句, 循環變量的定義域在 DO 子句中。

          ?

          <set> 有多種形式考慮:

          l?????? 可以是字符串的集合,中間用空白符分割:

          ?

          <string> <string> <string>

          l?????? 可以是通配符展開的 文件名或路徑名

          *.bat? *.?ml

          另外文件名還可以是特殊的字符 , 當前目錄 (.) 和上級目錄( ..

          這些內容之間可以通過分隔符分開,分隔符是空白、分號、逗號、雙引號,注意引號本身會傳遞到循環變量中去, 而分號和逗號則不會,另外如果其他三種分隔符出現在雙引號中,他們會被傳遞到循環變量中去。

          ?

          可以對不同種類的 <set> 值進行遍歷:

          l?????? 對字符串遍歷

          FOR %%<var> IN (<string-set>) DO <command>

          l?????? 對文件進行遍歷

          FOR %%<var> IN (<file-path-name-wildcard>) DO <command>

          ????????????? 下面的命令需要命令擴展打開

          l?????? 對目錄進行遍歷

          FOR /D %%<var> IN (<dir-path-name-wildcard>) DO <command>

          ?

          l?????? 遞歸遍歷文件樹

          FOR /R [[<driver>:]<path>] %%<var> IN (<set>) DO <command>

          ????????????? 如果沒有目錄指定,則默認從當前目錄開始。

          l?????? 進行步長型循環

          FOR /L %%<var> IN? (<start> <step> <end>) DO <command>

          其中 <start> <step> <end> 是整數(其他數會取整),無法解釋的字符串認為是 0 ,可以遞增或遞減。

          l?????? 文件遍歷和解析

          FOR /F ["<parsing-keywords>"] %%<var> IN (<set>) DO <command>

          其中 <parsing-keywords> 的形式(大小寫不敏感)如下:

          ?????? eof=<c>?????? #<c> 是一個字符的行結束符,默認是 newline 字符,行結束符后面認為是注釋

          ?????? skip=<N>?????? #<N> 是從行首跳過的行數,默認是 0

          delims=<xxx>?? #<xxx> 是記錄字段的分隔符集,默認是空格和 <tab> ,覆蓋默認會提取空白

          tokens=[{<X>,|<M>-<N>,}…][*]? # 指定提取的記錄字段,默認是 1 ,最后的 * 代表剩余字段

          ??????????????????????????????????????????????????????? # 剩余字段不會去除分隔符,但是去除注釋

          usebackq??????? # 使用 back quotation 作為命令的引用符(見 <set> 的格式),默認是不使用

          ?

          如果不使用 usebackq 選項, <set> 的形式:

          <file-set>???????????????????? #no quotation

          “<literal-string>”?? #double quotation

          ‘<command>’????? #single quotation

          如果使用 useback 選項, <set> 的形式:

          ?

          “<file-set>”????????? # double quotation

          ‘<literal-string>’???? #single quotation

          `<command>`????? #back quotation

          ?

          關于隱含變量,只需指定首個變量的字母,其它按順序依次排列,最多可以定義 26 個變量。(大小寫敏感)

          ?

          ?

          ?

          FOR 語句中的變量名同樣可以展開為:

          %%~[{f|d|a|z|s|n|x|t|p}][$<var>:]<c>

          ?

          4.?????? IF

          條件語句的語法格式為:

          ????? IF [NOT] <condition> <command> [ELSE <command>]

          ?????? 其中 NOT 表示條件真值去反。

          ??????

          ?????? 利用不同的 <condition>, 我們可以判斷

          l?????? ERROR-LEVEL:

          ERRORLEVEL <n>

          等于或大于 <n> 的錯誤發生時為真

          l?????? 字符串相等

          <string>==<string>

          字符串相等,不需要用引號環繞

          l?????? 文件存在

          EXIST <file-or-dir-name>

          下面需要命令擴展打開

          l?????? 字符串比較

          [/I] <string> <comparator> <string>

          /I 選項打開則比較是 case-insensitive, 如果都是數字作比較,則轉為用數值比較,只能比較整數,比較浮點數則采用字符串比較法。

          ?

          比較操作符 ( 大小寫不敏感 ) 包括:

          EQU ( 等于 ) LSS ( 小于 ) GTR ( 大于 ) 、 GEQ( 大于等于 ) 、 LEQ( 小于等于 ) NEQ( 不等)

          l?????? 命令行擴展版本

          CMDEXTVERSION <n>

          ????????????? 當命令擴展版本號大于或等于 <n> 時為真,該值最低版本為 1

          l?????? 變量定義

          DEFINE <var-name>

          ????????????? 如果變量的定義存在則為真

          ?????????????

          則自動增加一下變量定義

          -????????? %ERRORLEVEL% 定義為當前的即上次命令行執行產生的 errorlevel (一定有定義)

          -????????? %CMDCMDLINE% 定義為上次傳遞給命令解釋器 (cmd.exe) 的未經處理的原始命令行。 (如果 %CMDCMDLINE% 未被定義,否則不影響原始值)

          -????????? %CMDEXTVERSION% 定義為當前命令擴展的版本號(如果 % CMDEXTVERSION % 未被定義,否則不影響原始值)

          ?

          如果使用 ELSE 語句應當用以下形式,因為必須用復合語句或 newline 來結束 <command>:

          IF [NOT] <condition> (

          ????? <command>

          ) ELSE IF (

          ????? <command>

          ) ELSE (

          ????? <command>

          )

          或者:

          IF [NOT] <condition> (<command>) ELSE (<command>)

          ?

          5.?????? CHOICE

          選項分支命令,格式如下:

          CHOICE [/c [<choices>]] [/n] [/cs] [/t <timeout> /d <default>] [/m <msg>]

          其中 /c 選項指定用戶的選擇鍵,默認是 yn ,其顯示為:

          [Y, N]?

          ?????? /cs 指定大小寫敏感選擇,默認不敏感,如果不敏感則提示選擇鍵都采用大寫字符。

          ?????? /n 隱藏鍵提示信息。

          ?????? /t 指定超時時間 (second) ,根據版本不同可能會顯示遞減的計時數字,默認不超時。

          ?????? /d 超時后的默認選項。

          ?????? /m 指定提示信息,顯示在選擇鍵提示前面。

          注意,該命令不是所有的命令解釋器都支持。

          該命令返回用戶選擇鍵的序號 ( 1 開始 ) 作為 errorlevel 的值 , 可由 IF 語句判斷。

          ?

          6.?????? 如何定義組合語句 ?

          在上述控制語句中,如 DO 、 IF/ELSE 結構中,經常會嵌入一段代碼,由幾條語句構成,這時候需要定義組合語句,甚至在有些結構中,例如 IF/ELSE ,即使只有一條語句也寫成組合語句的形式。組合語句定義如下:

          (

          <command-lines>

          )

          ?????? 特別是 <command-lines> 為空,即可以定義空語句。

          ?????? 多個命令在一行時需要用 & 來分隔。
          posted on 2008-03-31 16:17 懵懵燈燈 閱讀(755) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌黎县| 和田县| 无锡市| 白城市| 融水| 女性| 江川县| 昌江| 酒泉市| 志丹县| 雷州市| 新余市| 利辛县| 阿克陶县| 姚安县| 桑植县| 阿拉善右旗| 定远县| 乌鲁木齐市| 城口县| 齐河县| 读书| 临汾市| 象山县| 泾源县| 万年县| 邢台市| 石台县| 秦安县| 南汇区| 民权县| 城口县| 射洪县| 石渠县| 夹江县| 新余市| 太仓市| 离岛区| 郁南县| 新巴尔虎左旗| 伊川县|