天天看點

【批處理學習筆記】第二十課:擴充字元串

    “擴充”這個詞彙來自于微軟自己的翻譯,意思就是對表示檔案路徑的字元串進行特殊的處理,具體功能羅列如下:

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

     ~I         - 删除任何引号("),擴充 %I

     %~fI        - 将 %I 擴充到一個完全合格的路徑名

     %~dI        - 僅将 %I 擴充到一個驅動器号

     %~pI        - 僅将 %I 擴充到一個路徑

     %~nI        - 僅将 %I 擴充到一個檔案名

     %~xI        - 僅将 %I 擴充到一個檔案擴充名

     %~sI        - 擴充的路徑隻含有短名

     %~aI        - 将 %I 擴充到檔案的檔案屬性

     %~tI        - 将 %I 擴充到檔案的日期/時間

     %~zI        - 将 %I 擴充到檔案的大小

     %~$PATH:I   - 查找列在路徑環境變量的目錄,并将 %I 擴充

                   到找到的第一個完全合格的名稱。如果環境變量名

                   未被定義,或者沒有找到檔案,此組合鍵會擴充到

                   空字元串

可以組合修飾符來得到多重結果:

     %~dpI       - 僅将 %I 擴充到一個驅動器号和路徑

     %~nxI       - 僅将 %I 擴充到一個檔案名和擴充名

     %~fsI       - 僅将 %I 擴充到一個帶有短名的完整路徑名

     %~dp$PATH:i - 查找列在路徑環境變量的目錄,并将 %I 擴充

                   到找到的第一個驅動器号和路徑。

     %~ftzaI     - 将 %I 擴充到類似輸出線路的 DIR

    以上内容引用于for /?幫助資訊。其中的I代表變量I,不過需要說明的是,不是所有的變量都能夠進行擴充的,有兩個條件:1、該字元串代表一個檔案路徑;2、變量要用%x來表示,x可取a-z A-Z 0-9共62個字元中的任意一個。舉例說明:

@echo off

echo 正在運作的這個批處理:

echo 完全路徑:%0

echo 去掉引号:%~0

echo 所在分區:%~d0

echo 所處路徑:%~p0

echo 檔案名:%~n0

echo 擴充名:%~x0

echo 檔案屬性:%~a0

echo 修改時間:%~t0

echo 檔案大小:%~z0

pause

    其中的%0是批處理裡面的參數,代表目前運作的批處理的完全路徑。類似的還有%1-%9,分别代表傳遞來的第1-9個參數。例子如下:

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

set aa=C:\Windows\PPP\a.btx

call :deal aaa %aa% "c c" ddd eee

pause>nul

exit

:deal

echo %%0 = %0

echo %%1 = %1

echo %%2 = %2

echo %%3 = %3

echo %%4 = %4

echo %%5 = %5

    其中,變量aa在之前是不可以擴充的,通過call指令并将aa作為參數傳遞給子函數:deal,将aa變量轉換成了變量%1,即符合%x格式,進而可以進行字元串擴充。

    至于%x中x取a-z A-Z的形式,可以複習一下for語句,for語句裡面的變量就是用%x來表示的,因而可以直接進行擴充。

繼續閱讀