自動編譯Java的Bat

文章主要通過一個自動編譯java的bat來簡單講解bat的使用,以及一些重點,該內容不適應於用來學習。該文件結果爲,例子,一些重點的命令使用


下面是一個自動編譯Java的bat


@echo off       ;;設置下面的命令都不在終端中輸出

;;遞歸指定目錄,默認爲bat所在目錄中的java文件,然後在進行編譯,遇見編譯錯誤將提示用戶是否刪除已編譯成的class
:startF    ;;定義一個startF標籤,當用戶輸入的目錄不存在時,可以重新輸入
SET /P pdath=輸入路徑(使用bat文件所在目錄,請按回車):  ;;在終端中輸入java源文件所在目錄,默認會使用該bat所在的目錄
IF "%pdath%"=="" SET pdath=%~dp0  ;;如果沒有輸入(直接按回車),則通過%~dp0來獲取該bat所在的目錄並且設置變量pdath
cd %pdath%  ;;cd到該目錄中
IF %errorlevel%==1 SET errorlevel=0&set pdath=&goto startF ;;如果該目錄不存在或cd出錯,將錯誤代碼設置爲0並且將pdath變量設置爲空,然後在回到starF標籤處重新執行

;;遍歷目錄中的java源文件

FOR /R %%i IN (*.java) do (

CALL:compile "%%i"  ;;將java源文件路徑當作參數,傳到compile標籤進行編譯
)
PAUSE ;;暫停
EXIT  ;;退出


;;編譯失敗後提示
:throwCompile
SET /P choose=請1將刪已編譯0不刪或直接回車: 
IF "%choose%"=="" EXIT ;;默認不輸入則直接退出
IF "%choose%"=="0" EXIT ;;輸入0則直接退出
IF "%choose%"=="1" GOTO delclass ;;如果輸入爲1則轉到delclass處執行刪除命令
SET choose=&GOTO throwCompile  ;;如果輸入其他沒意義的參數,則要求用戶重新輸入


;;刪除剛剛編譯完成的class

:delclass

;;遍歷該目錄中的所有class文件,並執行del刪除命令及輸出提示信息

FOR /R %%d IN (*.class) DO del "%%d"&ECHO "已刪除%%d"  
PAUSE
EXIT


;;編譯
:compile

javac %1   ;;編譯參數指定的java源文件

;;如果出錯則,轉到throwCompile處,否則提示編譯成功

IF %errorlevel%==1 ECHO "編譯%1出錯"&GOTO throwCompile 

ECHO "完成%1編譯"



重點講解

修改暫停的輸出字符,echo 提示的信息&pause>nul

For用法

FOR 參數%%變量名IN (相關文件或命令) DO 執行的命令
參數:FOR 有4 個參數/d /l /r /f

FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters 爲特定命令指定參數或命令行開關。

參數/d:主要用於目錄搜索,不會搜索文件,set裏面可以包含通配符*和?

參數/R FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 檢查以[drive:]path 爲根的目錄樹,集僅爲一個單點(.)字符,則枚舉該目錄樹,可以包含通配符

參數/L :FOR /L %variable IN (start,step,end) DO command [command-parameters] 該集表示以增量形式從開始到結束的一個數字序列

參數/F:迭代及文件解析 

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

帶引號的字符串"options"包括一個或多個
指定不同解析選項的關鍵字。這些關鍵字爲:

eol=c - 指一個行註釋字符的結尾(就一個)skip=n - 指在文件開始時忽略的行數。

delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。

tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代的for 本身。這會導致額外變量名稱的分配。

m-n格式爲一個範圍。通過nth 符號指定mth。如果符號字符串中的最後一個字符星號,那麼額外的變量將在最後一個符號解析之後分配並接受行的保留文本。

usebackq - 使用後引號(鍵盤上數字1 左面的那個鍵`)。

未使用參數usebackq 時:file-set 表示文件,但不能含有空格雙引號表示字符串,即"string"單引號表示執行命令,即'command'使用參數usebackq 時:file-set 和"file-set"都表示文件

當文件路徑或名稱中有空格時,就可以用雙引號括起來單引號表示字符串,即'string'後引號表示命令執行,即`command`

FOR 命令中的變量

~I - 刪除任何引號("),擴展%I
%~fI - 將%I 擴展到一個完全合格的路徑名
%~dI - 僅將%I 擴展到一個驅動器號
%~pI - 僅將%I 擴展到一個路徑
%~nI - 僅將%I 擴展到一個文件名
%~xI - 僅將%I 擴展到一個文件擴展名
%~sI - 擴展的路徑只含有短名
%~aI - 將%I 擴展到文件的文件屬性
%~tI - 將%I 擴展到文件的日期/時間
%~zI - 將%I 擴展到文件的大小
%~$PATH:I - 查找列在路徑環境變量的目錄,並將%I 擴展到找到的第一個完全合格的名稱。如果環境變量名未被定義,或者沒有找到文件,此組合鍵會擴展到空字符串

IF命令

IF [NOT] ERRORLEVEL number command (儘量使用這種形式%errorlevel%==0)
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command

IF EXIST filename (
del filename
) ELSE (
echo filename missing
)

Call命令和GOTO命令的區別?

  Call命令執行完後會回答調用的地方,而Goto則不會

  Call命令能帶參數和返回值,而GOTO不能



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章