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