引數傳遞對程式來說,是乙個很重要的事情,所以,獲得傳遞的引數是很重要的,接下來,我們來**下獲得傳遞的引數的n種方式。
1、%n 獲得傳遞的第n個引數(n最大為9)
就是傳遞過去的引數原樣值(並且忽略前後導空格)
@echo offecho %1
執行結果為(a.bat canshu)
canshu
2、%~1 也就是說,把第乙個引數的引用字串給去掉(兩段的引號),如果只有一側有的話,就刪除有的那一側。
すべての引用句 (") を削除して、%1 を展開します。
例如:"1"2"➡1"2 "1"2➡1"2 1"2"➡1"2 1"2➡1"2
@echo offecho %~1
執行結果:
f:\tmp>a.bat "1"2"
1"23、%~f1 獲取引數1指定的路徑的全路徑/如果是只指定檔名的話,就是當前路徑 + 引數1表示的全路徑名
%1 を完全修飾パス名に展開します。
例如引數1是c:\users\liuhongying\tmp\test.txt的時候,結果就是c:\users\liuhongying\tmp\test.txt
例如當前路徑是f:\tmp\,傳遞的引數是1234,那麼,得到的結果就是f:\tmp\1234
@echo offecho %~f1
執行結果:
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
c:\users\liuhongying\tmp\test.txt
f:\tmp>a.bat 1234
f:\tmp\1234
那如果沒有引數1的時候呢?輸入結果是什麼呢?然我們來看看
f:\tmp>a.bat
echo は です。
也就是說,如果這個引數本身就不存在的時候,取得的東西就是空的了。
4、%~d1 獲取引數1指定的路徑的碟符名/如果只指定檔名,那麼結果就是當前路徑的碟符名
%1 をドライブ文字だけに展開します。
例如引數1是c:\users\liuhongying\tmp\test.txt的時候,結果就是c:
例如當前路徑是f:\tmp\,那麼得到的結果就是f:
@echo offecho %~d1
執行結果:
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
c:f:\tmp>a.bat 1234
f:那如果沒有引數1的時候呢?輸入結果是什麼呢?然我們來看看
f:\tmp>a.bat
echo は です。
也就是說,如果這個引數本身就不存在的時候,取得的東西就是空的了。
5、%~p1 獲取引數1指定的路徑的路徑名/如果只指定檔名,那麼結果就是當前檔案的路徑名
%1 をパスだけに展開します。
例如引數1是c:\users\liuhongying\tmp\test.txt的時候,結果就是\users\liuhongying\tmp\
例如當前路徑是f:\tmp\,那麼得到的結果就是\tmp\
@echo offecho %~p1
執行結果為:
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
\users\liuhongying\tmp\
f:\tmp>a.bat 1234
\tmp\
那如果沒有引數1的時候呢?輸入結果是什麼呢?然我們來看看
f:\tmp>a.bat
echo は です。
也就是說,如果這個引數本身就不存在的時候,取得的東西就是空的了。
6、%~n1 獲取引數1指定的路徑的檔名/如果只指定檔名,那麼結果就是這個檔名
%1 をファイル名だけに展開します。
例如引數1是c:\users\liuhongying\tmp\test.txt,那麼路徑的檔名是test
@echo offecho %~n1
執行結果:
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
test
f:\tmp>a.bat test.txt
test
7、%~x1 就是表示檔案的副檔名(包括分隔符的句點)
%1 をファイル拡張子だけに展開します。
@echo offecho %~x1
執行結果
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
.txt
f:\tmp>a.bat test.txt
.txt
8、%~s1 獲取指定路徑的短路徑
展開されたパスは、短い名前だけを含みます。
什麼短路徑呢?短路徑就是使用一種命名規範來縮短表示路徑的長度。
短路徑名實在dos下的命名規則
在dos中,主檔名的長度不能超過8個字元
如果超過了8個 系統自動擷取前6個字元,然後加上~1
如果前6個字元一樣了,那麼路徑名就按照字串排序,然後就依次使用~2,~3
例如路徑名為c:\users\liuhongying\tmp\test.txt短路徑就是c:\users\liuhon~1\tmp\test.txt
@echo offecho %~s1
執行結果
f:\tmp>a.bat c:\users\liuhongying\tmp\testtesttest.txt
c:\users\liuhon~1\tmp\testtesttest.txt
由此看來,短路徑只是縮短路徑部分。
9、%~a1 獲取引數1指定的檔案的屬性(如果檔案不存在,結果就是空的)
%1 をファイル屬性に展開します。
@echo offecho %~a1
執行結果
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
--a--------
*這裡a代表的是存檔檔案屬性,具體還有什麼別的,在那個位置,如果以後有用到在總結吧。
10、%~t1 獲得檔案的更新日期和時間
%1 をファイルの日付/時刻に展開します。
@echo offecho %~t1
執行結果
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
2013/07/27 01:38
11、%~z1 獲得引數1指定檔案的大小(byte數)
%1 をファイルのサイズに展開します。
@echo offecho %~z1
執行結果
f:\tmp>a.bat c:\users\liuhongying\tmp\test.txt
1712、%~$path:1 在path指定的路徑中檢索引數1指定的檔案,如果找到了就返回全路徑,否則,就返回空。
@echo offset path=c:\users\liuhongying\tmp\
echo %~$path:1
執行結果
f:\tmp>a.bat test.txt
c:\users\liuhongying\tmp\test.txt
@echo offset path=c:\users\liuhongying\
echo %~$path:1
執行結果
f:\tmp>a.bat tmp\test.txt
c:\users\liuhongying\tmp\test.txt
由此可見,即path + 引數1拼成的字串指定的檔案如果存在,就返回該全路徑。
f:\tmp>a.bat test.txt
echo は です。
由以上執行結果可以看出,檢索不包括下層目錄。可以進一步驗證上乙個驗證結果。
獲取引數值的地方已經分析完了。
不過,這些方法可以有很多種組合方式。進一步的應用就要看你使用的靈活性了。
批處理Dos命令
來自vista 有關某個命令的詳細資訊,請鍵入 help 命令名 assoc 顯示或修改副檔名關聯。attrib 顯示或更改檔案屬性。break 設定或清除擴充套件式 ctrl c 檢查。bcdedit 設定啟動資料庫中的屬性以控制啟動載入。cacls 顯示或修改檔案的訪問控制列表 acl call...
DOS批處理命令 命令
命令是乙個禁止當前語句回顯的簡單命令。語法 command command 是要遮蔽的批處理命令 例如執行包含以下內容的bat檔案 echo onecho hello 1 echo echo hello 2 執行的結果是 f tmp echo hello 1 hello 1 hello 2 可見,e...
dos和批處理命令
這些是xp下的dos和批處理命令,dos用的可能不是太多,寫批處理的時候還是需要的,備查!assoc 顯示或修改副檔名關聯。at 計畫在計算機上執行的命令和程式。attrib 顯示或更改檔案屬性。break 設定或清除擴充套件式 ctrl c 檢查。cacls 顯示或修改檔案的訪問控制列表 acls...