wxappUnpackerbingo.bat腳本逐行解讀

      網友投稿 1136 2022-05-29

      之前發過一篇文章小程序反編譯工具在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的bingo.bat腳本逐行解讀

      這里定義了一個名為『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小時內刪除侵權內容。

      上一篇:RabbitMQ和Kafka到底怎么選?
      下一篇:華為云發布智能化編碼工具和云原生調測工具,重塑云開發生產力
      相關文章
      亚洲综合综合在线| 亚洲精品制服丝袜四区| 亚洲AV福利天堂一区二区三 | 亚洲精品日韩专区silk| 久久精品国产亚洲AV电影| 亚洲AV成人无码久久精品老人| 国产成A人亚洲精V品无码 | 亚洲欧洲日韩极速播放| 亚洲日韩乱码久久久久久| 亚洲国产精品xo在线观看| 亚洲精品亚洲人成在线观看麻豆| 亚洲精品无码少妇30P| 亚洲爽爽一区二区三区| 亚洲欧洲另类春色校园小说| 亚洲а∨天堂久久精品9966| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲国产一区在线| 亚洲中文字幕日本无线码| 亚洲国产香蕉人人爽成AV片久久| 国产成人亚洲精品狼色在线| 亚洲AV福利天堂一区二区三| 国产成人精品久久亚洲高清不卡| 亚洲日本va中文字幕久久| 亚洲国产综合精品| 亚洲成AV人片在线观看| 亚洲字幕AV一区二区三区四区| 亚洲夜夜欢A∨一区二区三区| 亚洲色偷偷色噜噜狠狠99| 亚洲国产成人精品无码区在线观看| 久久精品国产亚洲AV忘忧草18| 国产L精品国产亚洲区久久| 亚洲综合小说久久另类区| 无码欧精品亚洲日韩一区夜夜嗨| 亚洲国产日韩在线成人蜜芽 | 亚洲人成网亚洲欧洲无码久久| 亚洲欧美日韩中文高清www777| 91大神亚洲影视在线| 精品国产亚洲男女在线线电影 | 亚洲一本一道一区二区三区| 久久久久亚洲AV成人无码网站| 亚洲国产婷婷综合在线精品|