windows批处理 egret简单添加版本控制

已更新至最终版,在最下面!

更新nodejs gulp方法处理此问题                        传送门

前面的就当做开发历程来看吧

publish.bat

call egret build
call egret publish --version is17

call ../../_tools/Compression.bat
call ../../_tools/addversion.bat

Compression.bat  

压缩png图片,其软件为pngquant 请自行搜索下载

for /R bin-release/web/heyankun %%i in (*.png) do (
G:\_tools\pngquant -f --ext=.png 100 %%i
)

addversion.bat  

循环处理各种加载文件尾部添加版本号,其中使用sed方法需自行下载配置sed.exe环境变量sed处理main.min.js因为压缩后只有一行批处理失效问题,循环也可以使用sed命令优化。

@echo off & setlocal enabledelayedexpansion
echo "publish..."

set /p aaa=setversion:

for /R bin-release/web/heyankun %%s in (*.json) do (
for /f "tokens=*" %%i in (%%s) do (
if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
)>>tem.json
xcopy /y tem.json %%s
del tem.json
)

sed -i s/.json/.json?v=%aaa%/g bin-release/web/is17/main.min.js
del bin-release\web\is17\sed*

exit

:chg
rem jpg
set "line=!line:.jpg=.jpg?v=%aaa%!"
rem png
set "line=!line:.png=.png?v=%aaa%!"
rem json
set "line=!line:.json=.json?v=%aaa%!"
rem font
set "line=!line:.fnt=.fnt?v=%aaa%!"
rem mp3
set "line=!line:.mp3=.mp3?v=%aaa%!"
rem js
set "line=!line:.js"=.js?v=%aaa%"!" rem 第四个。。。
echo !line!
goto :eof

自此所有加载文件均自动添加版本控制

更新md5后缀,使没有改变的文件不用重新加载,对于几个文件使用了单独解析,因为变量传值问题无法结局,所以使用了临时文件来处理最终拼成了想要的字符串。

@echo off & setlocal enabledelayedexpansion
echo "publish..."

set aaa=1

for /R bin-release/web/heyankun %%s in (*.json) do (
for /f "tokens=*" %%i in (%%s) do (
set pa=%%i
set pb=!pa:asset=!

set sb=!pa:{"file":"=!

set mb=!pa:"main.min.js"=!

if !pa! NEQ !pb! (
set pc=!pa:url":"=!
set pd=!pc:"=!
set haxi=md5 -n resource/!pd!
!haxi!>>tb.txt
for /f "delims=" %%b in (tb.txt) do (
set px=!pa:.json=.json?v=%%b!
set py=!px:.jpg=.jpg?v=%%b!
set pz=!py:.png=.png?v=%%b!
set pm=!pz:.fnt=.fnt?v=%%b!
set pn=!pm:.mp3=.mp3?v=%%b!
echo !pn!>>tem.txt
del tb.txt
)
)else if !pa! NEQ !sb! (
set sc=!pa:{"file":"=!
set sd=!pc:","frames":{=!
set haxia=md5 -n resource/!sd!
!haxia!>>tb.txt
for /f "delims=" %%d in (tb.txt) do (
set sx=!pa:.png=.png?v=%%d!
echo !sx!>>tem.txt
del tb.txt
)
)else if !pa! NEQ !mb! (

set haxib=md5 -n bin-release/web/heyankun/main.min.js
!haxib!>>tb.txt
for /f "delims=" %%d in (tb.txt) do (
set mx=!pa:.js=.js?v=%%d!
echo !mx!>>tem.txt
del tb.txt
)
)else (
echo !pa!>>tem.txt
)

)
xcopy /y tem.txt %%s
del tem.txt
)

set haxic=md5 -n bin-release/web/heyankun/main.min.js
!haxic!>>tb.txt
for /f "delims=" %%c in (tb.txt) do (
sed -i s/.json/.json?v=%%c/g bin-release/web/heyankun/main.min.js
del bin-release\web\heyankun\sed*
del tb.txt
)
exit

终极版使用md5重命名此方法彻底解决问好不能解决的顽固缓存,因为只要改变它就是一!个!新!的!文件,无论如何也会重新加载。

@echo off & setlocal enabledelayedexpansion
echo "publish..."
::处理main.min.js里边的default.res.json文件引用名以及其文件名
::获取default.res.json的md5值
set haxic=md5 -n bin-release/web/heyankun/resource/default.res.json
::使用存临时文件的方法解决md5值存放问题
!haxic!>>tb.txt
for /f "delims=" %%e in (tb.txt) do (
::调用sed命令修改内容,因为单行超长所以无法使用批处理命令
sed -i s/.res.json/_%%e.res.json/g bin-release/web/heyankun/main.min.js
::移除临时文件
del bin-release\web\heyankun\sed*
::修改default.res.json文件名添加md5值
set fullname3=%cd%\bin-release\web\heyankun\resource\default.res.json
set newname3=default_%%e.res.json
::重命名方法
rename "!fullname3!" "!newname3!"
::移除临时文件
del tb.txt
)

::处理所有json引用素材文件以及字体文件
for /R bin-release/web/heyankun %%s in (*.json *.fnt) do (
::遍历单个json等文件内容每一行分析
for /f "tokens=*" %%i in (%%s) do (
::主定义 根据统一格式的关键字来判定具体某一行的处理方式
set pa=%%i
::普通素材
set pb=!pa:asset=!
::图集和字体
set sb=!pa:{"file":"=!
::特殊的main.min.js
set mb=!pa:"main.min.js"=!
::判断普通素材
if !pa! NEQ !pb! (
set pc=!pa:url":"=!
set pd=!pc:"=!
set haxi=md5 -n resource/!pd!
!haxi!>>tb.txt
for /f "delims=" %%b in (tb.txt) do (
::比较low的逐类型替换
set px=!pa:.json=_%%b.json!
set py=!px:.jpg=_%%b.jpg!
set pz=!py:.png=_%%b.png!
set pm=!pz:.fnt=_%%b.fnt!
set pn=!pm:.mp3=_%%b.mp3!
echo !pn!>>tem.txt
::拼完整路径地址串
set fullname=%cd%\bin-release\web\heyankun\resource\!pd:/=\!
::获取地址字符串中的文件名
set a=%cd%\bin-release\web\heyankun\resource\!pd:/=\!
call :getname !a!
::修改文件名
set newname=!a:.=_%%b.!
rename "!fullname!" "!newname!"

del tb.txt
)
)else if !pa! NEQ !sb! (
::处理突击和文本
set sc=!pa:{"file":"=!
set sd=!sb:","frames":{=!
set haxia=md5 -n resource/assets/!sd!
!haxia!>>tb.txt
for /f "delims=" %%c in (tb.txt) do (
set sx=!pa:.png=_%%c.png!
echo !sx!>>tem.txt
::此处无法获取相对路径,所有需要把突击放到根目录
set fullname1=%cd%\bin-release\web\heyankun\resource\assets\!sd:/=\!
set newname=!sd:.=_%%c.!

rename "!fullname1!" "!newname!"

del tb.txt
)
)else if !pa! NEQ !mb! (
::处理main.min.js的引用以及名字修改
set haxib=md5 -n bin-release/web/heyankun/main.min.js
!haxib!>>tb.txt
for /f "delims=" %%d in (tb.txt) do (
set mx=!pa:.min.js=_%%d.min.js!
echo !mx!>>tem.txt

set fullname2=%cd%\bin-release\web\heyankun\main.min.js
set newname2=main_%%d.min.js
echo !fullname2! !newname2!
rename "!fullname2!" "!newname2!"

del tb.txt
)
)else (
::无资源相关内容直接打印
echo !pa!>>tem.txt
)

)
::拷贝文件到源文件并移除临时文件
xcopy /y tem.txt %%s
del tem.txt
)

exit
::获取文件名
:getname
set "a=%~nx1"

注:egret 5.0.2

本文作者:依十七  本文链接:http://www.is17.com/438/

本站文章若无特别说明,皆为原创,如需转载,请以超链接形式注明作者和原始出处及本声明

发布者

依十七

风逝难依,陌归十七。

发表评论

电子邮件地址不会被公开。 必填项已用*标注