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 <variable>=[<value>]
如果 <value> 是空字符串,则取消变量的定义,变量的值用双引号或空格结束。引号如果没有结束,则默认范围到行尾。
-
如何使用 MS-DOS 脚本的调用参数
ECHO %<n>
N 的范围为 0-9 , %0 为文件名, %1-%9 为参数,每次调用脚本最多支持 9 个参数
ECHO %*
%* 代表所有传入的参数,即 %1-%9 ,并且包括其中的空白符
-
%*
-
%<n>
Echo 命令
打开回显或关闭请求回显功能,或显示消息。如果没有任何参数, echo 命令将显示当前回显设置。
语法 :
echo [{on │ off}] [message]
Sample :@echo off / echo hello world
@ 命令
表示不显示 @字符放在命令前将关闭该命令回显,无论此时回显是否处于打开状态。
Sample :@echo off
CALL命令
可以在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理 CALL [drive:][path]filename [batch-parameters] 调用的其它批处理程序。filename 参数必须具有 .bat 或 .cmd 扩展名。CALL :label arguments 调用本文件内命令段,相当于子程序。被调用的命令段以标签:label开头 以命令goto :eof结尾
其它还有很多命令,这里就不再赘述了,有兴趣的同学可以自行查阅。
- 点赞
- 收藏
- 关注作者
评论(0)