windows批處理CALL命令及其相關

CALL命令可以在批處理執行過程中調用另一個批處理,當另一個批處理執行完後,再繼續執行原來的批處理

調用一條批處理命令,和直接執行命令效果一樣,特殊情況下很有用,比如變量的多級嵌套。在批處理編程中,可以根據一定條件生成命令字符串,用call可以執行該字符串

CALL [drive:][path]filename [batch-parameters]

調用的其它批處理程序。filename 參數必須具有 【.bat】 或 【.cmd】 擴展名。

CALL :label arguments

調用本文件內命令段,相當於子程序。被調用的命令段以標籤:label開頭;

以命令goto :eof結尾。

另外,批腳本文本參數參照(%0、%1、等等)已如下改變:
批腳本里的 %* 指出所有的參數(如 %1 %2 %3 %4 %5 …)
批參數(%n)的替代已被增強。

可以是使用如下語法:

%~1 - 刪除引號("),擴充 %1
%~f1 - 將 %1 擴充到一個完全合格的路徑名
%~d1 - 僅將 %1 擴充到一個驅動器號
%~p1 - 僅將 %1 擴充到一個路徑
%~n1 - 僅將 %1 擴充到一個文件名
%~x1 - 僅將 %1 擴充到一個文件擴展名
%~s1 - 擴充的路徑指含有短名
%~a1 - 將 %1 擴充到文件屬性
%~t1 - 將 %1 擴充到文件的日期/時間
%~z1 - 將 %1 擴充到文件的大小
%~PATH:1−查找列在PATH環境變量的目錄,並將PATH:1 - 在列在 PATH 環境變量中的目錄裏查找 %1,
並擴展到找到的第一個文件的驅動器號和路徑。
%~ftza1 - 將 %1 擴展到類似 DIR 的輸出行。

在上面的例子中,%1 和 PATH 可以被其他有效數值替換。
%~ 語法被一個有效參數號碼終止。%~ 修定符不能跟 %*使用
注意:參數擴充時不理會參數所代表的文件是否真實存在,均以當前目錄進行擴展

要理解上面的知識,下面的例子很關鍵

@echo off
Echo 產生一個臨時文件 > tmp.txt
Rem 下行先保存當前目錄,再將c:\windows設爲當前目錄
pushd c:\windows
Call :sub tmp.txt
Rem 下行恢復前次的當前目錄
Popd
Call :sub tmp.txt
pause
Del tmp.txt
exit
:sub
Echo 刪除引號: %~1
Echo 擴充到路徑: %~f1
Echo 擴充到一個驅動器號: %~d1
Echo 擴充到一個路徑: %~p1 
Echo 擴充到一個文件名: %~n1
Echo 擴充到一個文件擴展名: %~x1
Echo 擴充的路徑指含有短名: %~s1 
Echo 擴充到文件屬性: %~a1 
Echo 擴充到文件的日期/時間: %~t1 
Echo 擴充到文件的大小: %~z1 
Echo 擴展到驅動器號和路徑:%~dp1
Echo 擴展到文件名和擴展名:%~nx1
Echo 擴展到類似 DIR 的輸出行:%~ftza1
Echo.
Goto :eof

本文來源:https://www.jb51.net/article/151923.htm

發佈了29 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章