新聞速報

        

2014年3月19日 星期三

Batch 之 For 迴圈用法

取出指定位置的字串
SET TEXT=Hello World
SET SUBSTRING=%TEXT:~3,5%
ECHO %SUBSTRING%

/r 遍歷整個目錄樹
C:\>for /r  .  %a in (*.txt) do @find "flyfox" %a
在當前目錄的所有 txt 文件(包括子目錄)內容中尋找 "flyfox" 字串。


/f 將文件內容作為循環範圍
for /f %a in (del.txt) do del %a
for /f "skip=5 tokens=5" %a in (del.txt) do @if exist %a DEL %a
略過前 5 行,並將每列的第 5 行作為循環值放入 %a,如果存在即刪除此檔案。

skip=n          - 指定在檔案開頭要掠過的行數。


/f 將某一指令執行結果作為循環範圍

C:\>date /t
2011/03/22 星期二

C:\>for /f "tokens=1,2,3 delims=/ " %a in ('date /t') do @echo %a-%b-%c
2011-03-22

針對('date /t'),以"/"和" "做為分隔的條件,並在拆解之後以 %a-%b-%c 的格式,
印出所取得的對應第一、二、三個 tokens 變數值。

delims=xxx      - 指定分隔符號的集合。
                  這會取代預設的空白與定位字元的分隔符號集合。
tokens=x,y,m-n  - 指定每一行的哪些文字串應該被
                  傳到 for 的內部以用來進行每一個重複操作。
                  這會導致額外的變數名稱被配置。
                  m-n 格式代表一個範圍,指定了第 m 個到第 n 個字串項。
                  如果在 tokens= 字串的最後一個字元是星號,
                  則會配置一個額外的變數來接收最後一個字串項被分析後的其他文字。
usebackq        - 指定新語義開始作用。
                  其中反括號的字串會被當作命令來執行,而單引號字串是純文字字串。
                  此外還允許使用雙引號來引用在 filenameset 內的檔名。


%~ 操作符將檔案名分離成檔案名、副檔名、磁碟代號等獨立部分

C:\test>for /r c:\test %a in (*.txt) do @echo %~na
del
複製 -1
複製 -2


C:\test>for /r %a in (*.txt) do @echo %~nxa
del.txt
複製 -1.txt
複製 -2.txt


    %~I         - 展開 %I 且移除包圍的引號 (")
    %~fI        - 展開 %I 為一個完全符合的路徑名稱
    %~dI        - 只展開 %I 為磁碟機代號
    %~pI        - 只展開 %I 為路徑
    %~nI        - 只展開 %I 為檔名
    %~xI        - 只展開 %I 為副檔名
    %~sI        - 展開的路徑只包含短檔名
    %~aI        - 展開 %I 為檔案的檔案屬性
    %~tI        - 展開 %I 為檔案的日期/時間
    %~zI        - 展開 %I 檔案的長度
    %~$PATH:I   - 搜尋所有列在 PATH 環境變數內的目錄
                   且展開 %I 為
                   第一個找到的完全符合檔名。
                   如果沒有定義環境變數名稱
                   或是搜尋找不到檔案,
                   則這個修飾元會展開為
                   空字串。
    %~dpI       - 只展開 %I 為磁碟機代號與路徑
    %~nxI       - 只展開 %I 為檔名與副檔名
    %~fsI       - 只展開 %I 為含短檔名的完全路徑
    %~dp$PATH:i - 為 %I 搜尋所有列在 PATH 環境變數內的目錄
                   且展開第一個找到的項目為磁碟機代號及
                   路徑。
    %~ftzaI     - 展開 %I 為像 DIR 一樣的輸出行

沒有留言:

張貼留言