wxappUnpackerbingo.bat脚本逐行解读

网友投稿 1030 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_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 "" ] 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 )

批处理文件中:

@echo off for /f "delims=\" %%i in ('dir /b /a-d /o-d "*.%FILE_FORMAT%"') do (call :wxappUnpacker_pkg "%%i" )

需要注意的是在批处理文件中引用变量需要两个百分号 %%。

第34~44行:

:de_pkg if "-d" == "%1" (call :wxappUnpacker %1 %2) else (call :wxappUnpacker_pkg %1 %2) goto:eof

这里定义了一个函数,作用是根据参数是否是目录来调用解包命令。

wxappUnpacker的bingo.bat脚本逐行解读

第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小时内删除侵权内容。

上一篇:【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”
下一篇:【云小课】EI第16课 ModelArts 使用自定义镜像快速迁移上云-这2种功能,你了解哪些?
相关文章