wxappUnpacker的bingo.bat腳本逐行解讀
之前發過一篇文章小程序反編譯工具在windows系統下的調用腳本提到了Windows平臺下的腳本,但是對腳本沒有做詳細說明。本文就是針對腳本做的講解。對批處理感興趣的可以了解下。
不會基礎也沒關系。下面我們進入正題。
腳本解讀
第1行:
# WXAPPUNPACKER_PATH 項目路徑
這段其實在 shell 文件中是注釋內容,只不過在翻譯這份腳本的時候是邊查邊寫,復制過來沒有修改,所以嚴格說這里屬于翻譯錯誤,正確的內容應該是如下:
:: WXAPPUNPACKER_PATH 項目路徑
:: 代表表示該行是注釋內容
第2行:
set WXAPPUNPACKER_PATH=%~dp0
『%~dp0』是啥?
“d”為Drive的縮寫,即為驅動器,磁盤
“p”為Path縮寫,即為路徑,目錄 所以『%~dp0』就表示獲取當前路徑。
這段的作用就是定義了名為『WXAPPUNPACKER_PATH』的變量并且值為當前目錄。
第4行:
set FILE_FORMAT=wxapkg
定義名為『FILE_FORMAT』的變量,值為 wxapkg
第6~12行:
:wxappUnpacker_pkg echo "node %WXAPPUNPACKER_PATH%/wuWxapkg.js %fname%" node %WXAPPUNPACKER_PATH%/wuWxapkg.js %2 %1 goto:eof
這里定義了一個名為『wxappUnpacker_pkg』的函數,打印即將執行的腳本:"node [當前路徑]/wuWxapkg.js [文件名]" 執行腳本:node [當前路徑]/wuWxapkg.js 參數2 參數1
第14~32行:
:wxappUnpacker set de_dir=%1 if "%de_dir%" == "" set de_dir=%WXAPPUNPACKER_PATH% echo %de_dir% echo "for wxapkg in `find %de_dir% "*.${FILE_FORMAT}"`" for %%fname in `/f %de_dir% -name "*.%FILE_FORMAT%"` do (call :wxappUnpacker_pkg %fname% %2) goto:eof
這里定義了一個函數,作用是循環調用解包命令。
遺憾的是這里的腳本存在翻譯錯誤:
對比下?shell?腳本來看看,定義一個de_dir變量賦值為第一個傳入參數。然后
if [ -z "$1" ] then de_dir=`pwd` fi
是要判斷傳入參數是否為空字符串,是空串就賦值為取當前目錄的命令,所以這里就翻譯錯了,在MS-DOS下獲取當前目錄的命令為%cd%。再往下是循環查找wxapkg文件,同樣也錯了,正確的命令應該是
命令行環境:
for /f "delims=\" %i in ('dir /b /a-d /o-d "%cd%\*.%FILE_FORMAT%"') do (call :wxappUnpacker_pkg %i $2)
批處理文件中:
@echo off for /f "delims=\" %%i in ('dir /b /a-d /o-d "*.%FILE_FORMAT%"') do (call :wxappUnpacker_pkg "%%i" $2)
需要注意的是在批處理文件中引用變量需要兩個百分號?%%。
第34~44行:
:de_pkg if "-d" == "%1" (call :wxappUnpacker %1 %2) else (call :wxappUnpacker_pkg %1 %2) goto:eof
這里定義了一個函數,作用是根據參數是否是目錄來調用解包命令。
第46行:
# $1: pkg file or pkg dir; $2: order
這里也是翻譯錯誤,應該在開頭用::標記注釋。
第48行:
call :de_pkg %1 %2
很簡單,就是調用?de_pkg?函數,同時傳入了兩個參數。
基礎知識
最后說幾個基礎知識
%CD% - 擴展到當前目錄字符串。
%DATE% - 用跟 DATE 命令同樣的格式擴展到當前日期。
%TIME% - 用跟 TIME 命令同樣的格式擴展到當前時間。
%RANDOM% - 擴展到 0 和 32767 之間的任意十進制數字。
%ERRORLEVEL% - 擴展到當前 ERRORLEVEL 數值。
%CMDEXTVERSION% - 擴展到當前命令處理器擴展名版本號。
%CMDCMDLINE% - 擴展到調用命令處理器的原始命令行。
%0 bat的完整路徑名如"C:\Windows\system32\xxx.bat"
參數%0具有特殊的功能,可以調用批處理自身,以達到批處理本身循環的目的,也可以復制文件自身等等。
%1 bat參數1依次類推%2參數2...
%path% - 當前的環境變量。以分號隔開的路徑列表,路徑可包含空格,可以以''結尾, 可以以雙引號包圍之。
SET
如果
如何使用 MS-DOS 腳本的調用參數
ECHO %
N 的范圍為 0-9 , %0 為文件名, %1-%9 為參數,每次調用腳本最多支持 9 個參數
ECHO %*
%* 代表所有傳入的參數,即 %1-%9 ,并且包括其中的空白符
%*
%
打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數, echo 命令將顯示當前回顯設置。
語法 :
echo [{on │ off}] [message]
Sample :@echo off / echo hello world
表示不顯示 @字符放在命令前將關閉該命令回顯,無論此時回顯是否處于打開狀態。
Sample :@echo off
可以在批處理執行過程中調用另一個批處理,當另一個批處理執行完后,再繼續執行原來的批處理 CALL [drive:][path]filename [batch-parameters] 調用的其它批處理程序。filename 參數必須具有 .bat 或 .cmd 擴展名。CALL :label arguments 調用本文件內命令段,相當于子程序。被調用的命令段以標簽:label開頭 以命令goto :eof結尾
其它還有很多命令,這里就不再贅述了,有興趣的同學可以自行查閱。
MapReduce 機器翻譯
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。