做Laya项目发布,最烦的不是写代码,而是每次发版前那套固定的体力活:打开bin目录找H5产物,右键压缩,重命名成带日期的zip包,发给测试;拿到更新包又要先解压到临时目录,再手动覆盖过去。次数多了,我开始琢磨能不能让Cmd/Bat脚本替我把这套流程跑完。后来花了一个下午把脚本写好,又踩了一堆编码和路径的坑,才终于做到“双击、输入参数、走人”。这篇文章就是把当时的脚本思路、zip/unzip在Windows环境下的几种做法,以及开箱可用的完整代码一起整理出来,给同样在Laya项目里做构建、发版、资源同步的读者一个可以直接抄作业的参考。
文章适合两类人:完全没写过批处理的Laya开发者,以及写过一点Bat但对压缩解压方案拿不准的人。前者可以从第二节语法部分快速补课,后者可以直接跳到第四节的完整脚本。我尽量把为什么这样写、为什么选这个方案也讲清楚,而不是只扔一段代码。
1. 被重复劳动逼出来的自动化:Laya项目里的Bat脚本使用场景
1.1 发布流程里那些不得不做的手工操作
我接手过一个横版过关的H5项目,目录结构大概是这样的:
D:\Work\DemoGame\ ├── bin\ │ ├── h5\ # 引擎编译后的H5发布产物 │ ├── libs\ # 引擎库文件 │ └── res\ # 原始美术资源 ├── build\ # 存放打包输出的zip ├── tools\ # 工具脚本目录 └── update\ # 接收到的外部更新包每次发版流程是这样的:先在IDE里重新编译H5,确认产物没问题,然后进bin/h5目录,全选,右键压缩,把压缩包改成带日期的名字,再上传或者发给测试。版本迭代频繁的时候,这个流程一天可能要跑四五次。手动压缩还容易出问题:有时候忘了把旧资源清干净,有时候压缩包名字写错,有时候干脆压错目录。这套流程一旦出错,测试那边拿到的包就是不对的,来回沟通成本很高。
接受更新包那边也有问题。测试或合作方给一个zip包,我这边要先解压到临时目录,确认内容,再手动拷贝到bin/h5里覆盖。文件多的时候,覆盖过程要等很久,中途还不能关窗口,否则目标目录里可能残留半个旧版本。
这些操作本身不难,但胜在重复、机械、容易疲劳出错的。把这类高频操作固化成脚本是天然需求,而Bat脚本正好是Windows环境下最“零成本”的解决方案。
1.2 为什么偏偏选Cmd/Bat,而不是Node或Python
团队里肯定有人会问:都写游戏了,为什么不直接上Python或者Node脚本?我的理由有三个。
第一,零依赖。Laya项目成员不一定都装了Python或者Node全局环境,但Windows系统一定有cmd。双击就能跑,不用配环境变量,不用安装包。第二,透明可读。.bat文件本身是纯文本,双保险:既能让其他同事看懂自动化流程干了什么,也能在出问题时即时查看执行过程。第三,和Windows原生工具集成好。复制、删除、压缩、解压、计划任务、右键菜单,这些都是Windows内置能力,用cmd脚本可以直接调度它们,非常顺手。
但也要说清楚,Bat不是万能的。复杂的正则处理、JSON解析、URL下载这类工作,Bat写起来非常痛苦,这种情况我建议用PowerShell或者把逻辑拆到别的脚本里。Bat最适合的角色是“胶水脚本”:把现有工具按顺序调动起来,加一点判断和参数,记录日志,失败时给出明确提示。Laya项目的打包解压恰恰就是这种胶水场景。
2. 批处理语法只需这几招:基础命令与易错点
2.1 高频命令速查表
如果你完全没接触过批处理,先不用去啃几百页文档。后面脚本里用到的命令,其实就下面这一张表。
| 命令 | 作用 | 典型示例 |
|---|---|---|
echo | 输出文本 | echo 开始打包 |
rem/:: | 注释 | rem 这是注释 |
set | 设置变量 | set "name=value" |
if | 条件判断 | if exist "C:\a.txt" echo 找到 |
for | 循环 | for /d %%i in (*) do echo %%i |
call | 调用子过程或另一个bat | call :do_pack |
goto | 跳转到指定标签 | goto :do_pack |
exit /b | 退出脚本并返回错误码 | exit /b 1 |
大部分脚本逻辑都可以用这些命令拼出来。真正容易让新手卡住的是变量和括号的细节,下面单独展开。
2.2 变量赋值的正确姿势:set后面别乱加空格
Bat里变量赋值的坑,十个有九个出在空格上。看下面这个对比:
set name = Laya echo %name%这段代码不会报错,但%name%是空的,因为变量名成了name加一个空格,变量值则是Laya前面有个空格。正确写法是把引号包在整个赋值表达式上:
set "name=Laya" echo %name%这样写的好处是,就算路径里带空格也不会出问题。例如:
set "H5_DIR=D:\Work\My Game\bin\h5" echo %H5_DIR%如果不加引号直接写成set H5_DIR=D:\Work\My Game\bin\h5,变量值只能记到D:\Work\My为止,后面全丢了。这是新手最容易踩的坑,也是后面脚本里所有路径变量都用set "变量=路径"写法的原因。
2.3 %~dp0等参数扩展:让脚本永远在自己的目录下运行
写脚本时最怕的就是双击执行时“当前目录”不是脚本所在目录,导致相对路径全部失效。所以脚本开头一定要拿到自身所在目录,这个靠%~dp0实现。
set "SCRIPT_DIR=%~dp0" echo 脚本所在目录: %SCRIPT_DIR%%~dp0是批处理内置的参数扩展,表示当前脚本所在路径,结尾自动带一个反斜杠。类似还有%~f0表示当前脚本完整路径,%~nx0表示当前脚本文件名,%~dp1表示第一个参数所在目录。有了%~dp0,后面所有路径都可以基于它来拼接,脚本放到任何位置都不会迷路。
2.4 if判断的引号问题与延迟扩展
字符串比较时,一个常见报错是“此时不应有xxx”。原因通常是变量为空或包含空格时,没有加引号。所以标准写法是:
if "%ACTION%"=="pack" ( goto :do_pack )把变量值和比较值都用引号包起来,哪怕变量为空,也会变成比较""=="pack",语法上是合法的,只是结果不匹配而已。
括号代码块里还有个更隐蔽的坑。看这个循环:
set count=0 for %%i in (*.zip) do ( set count=1 echo %count% )这段代码里的echo %count%永远输出0,而不是1。原因是在解析整个for语句时,%count%已经按旧值被替换了,运行到循环体内部时根本来不及重新取值。解决办法是启用延迟扩展,把%count%改成!count!:
setlocal enabledelayedexpansion set count=0 for %%i in (*.zip) do ( set count=1 echo !count! )延迟扩展的原理是:百分号形式的变量在语句解析时展开,叹号形式的变量在执行到那一行时才展开。后面脚本里我在循环或括号块中动态获取值的地方,都用!变量!,同时第一行就会写setlocal enabledelayedexpansion把机制打开。
3. zip/unzip在Windows里的四种方案与我的选型理由
3.1 方案一:Windows自带tar命令
很多人不知道Windows 10 1803之后系统内置了tar命令。虽然它沿用了Unix系的参数风格,但实际是libarchive移植版,支持zip格式。用法如下:
rem 压缩,-a表示按扩展名自动选压缩格式,这里会生成zip tar -a -c -f out.zip bin\h5\ rem 解压到当前目录 tar -x -f out.zip rem 解压到指定目录 tar -x -f out.zip -C D:\temp\out优点是没有第三方依赖,一条命令搞定。缺点是参数风格和cmd其他命令差异很大,而且中文文件名在某些版本下压缩再解压容易乱码。如果只是做纯英文资源的归档备份,tar没问题;但游戏项目里资源文件名经常带中文,所以我最终没有选它当主力。
3.2 方案二:PowerShell的Compress-Archive与Expand-Archive
Windows自带的PowerShell提供了两个现成命令:Compress-Archive用于压缩,Expand-Archive用于解压。在Bat里用powershell -Command调用即可:
rem 压缩 powershell -ExecutionPolicy Bypass -Command "Compress-Archive -Path 'D:\Work\DemoGame\bin\h5\*' -DestinationPath 'D:\Work\DemoGame\build\out.zip' -Force" rem 解压 powershell -ExecutionPolicy Bypass -Command "Expand-Archive -Path 'D:\Work\out.zip' -DestinationPath 'D:\Work\temp\unpack' -Force"这里有个细节要注意:Compress-Archive的-Path如果写目录本身,会把目录也放进压缩包里;写目录\*则只放目录里的内容。Laya项目的需求通常是把h5目录里的内容直接变成压缩包根内容,所以用通配符*。
-Force参数是覆盖已存在文件的开关。不加-Force,目标zip已存在时会报错。Expand-Archive同理,目标目录已存在且文件同名时会报错,加上-Force会直接覆盖。
这套方案的优势很明确:系统自带、中文支持好、参数语义直观、错误信息也看得懂。缺点是PowerShell进程启动有一两秒延迟,但发版打包这种低频操作完全能接受。
3.3 方案三:7-Zip命令行工具
如果对压缩率有硬要求,或者要打很大的包,那还是得看7-Zip。安装7-Zip后,用7z.exe命令行操作:
rem 压缩,-tzip指定zip格式,-r递归子目录 7z a -tzip out.zip D:\Work\DemoGame\bin\h5\* -r rem 解压,-o指定解压目录,-y自动覆盖 7z x out.zip -oD:\Work\temp\unpack -y7-Zip的优点是压缩率比PowerShell高、速度快、支持分卷、加密、排除文件等高级功能。缺点是目标机器上不一定装了7-Zip。如果按“开箱可用”的标准,要么把7z.exe绿色版塞到项目工具的目录里一起分发,要么就得接受部分同事电脑跑不了这个问题。
3.4 方案四:VBS调用Shell.Application的ZipFolder接口
还有一个纯系统级别的方案:通过VBScript调用Shell.Application对象完成zip复制和解压。简要示例:
Set fso = CreateObject("Scripting.FileSystemObject") Set shell = CreateObject("Shell.Application") ' 解压zip到目标目录 shell.NameSpace("D:\Work\temp\unpack").CopyHere shell.NameSpace("D:\Work\out.zip").Items, 4这个方案不依赖任何第三方工具,zip是Windows资源管理器内置支持的格式。但要注意CopyHere是异步操作,脚本必须等待完成再继续,否则后续流程会拿不到文件。处理异步等待很繁琐,而且排错不好排。我在入门脚本里不推荐它,除非目标机器连PowerShell都很老,那才需要考虑。
3.5 四种方案对比和我的最终选择
| 方案 | 是否需安装 | 中文文件名 | 速度 | 适合场景 | 复杂度 |
|---|---|---|---|---|---|
| 自带tar | 否 | 一般,老版本易乱码 | 快 | 纯英文归档 | 低 |
| PowerShell | 否 | 好 | 中 | 通用打包解压 | 低 |
| 7-Zip | 是 | 好 | 快 | 大批量压缩、加密 | 中 |
| VBS Shell | 否 | 好 | 中 | 老旧系统兜底 | 中 |
我最后选的是PowerShell方案,理由非常实际:系统自带、不会出现中文乱码、-Force覆盖逻辑干净、错误提示直观。Laya项目的H5产物数量不算极端大,PowerShell的压缩速度完全够用。如果你拿到脚本后跑起来发现几万个小文件压缩太慢,再换7-Zip也不迟,脚本结构里压缩这一步本来就是独立函数,替换很顺手。
4. 开箱即用的Laya打包/解压脚本:完整实现与逐段拆解
4.1 脚本的完整代码
这一节给出我在项目中实际使用的脚本,也就是可直接复制到你的Laya项目tools目录下使用的版本。功能有三个:打包bin/h5、解压更新包并覆盖到bin/h5、显示基础日志与错误码。
@echo off setlocal enabledelayedexpansion chcp 65001 >nul rem ============================================================ rem Laya项目资源打包与更新包解压脚本 rem 用法: rem pack.bat pack 打包 bin\h5 到 build 目录 rem pack.bat unpack <zip路径> 解压更新包到 bin\h5 rem ============================================================ set "SCRIPT_DIR=%~dp0" set "PROJECT_DIR=%SCRIPT_DIR%.." set "H5_DIR=%PROJECT_DIR%\bin\h5" set "BUILD_DIR=%PROJECT_DIR%\build" set "TEMP_UNPACK_DIR=%PROJECT_DIR%\temp\unpack_cache" set "ACTION=%~1" rem ---------- 参数校验 ---------- if "%ACTION%"=="" ( echo 用法: pack.bat pack 或 pack.bat unpack ^<zip路径^> exit /b 1 ) if /i "%ACTION%"=="pack" goto :do_pack if /i "%ACTION%"=="unpack" goto :do_unpack echo 未知参数: %ACTION% exit /b 1 rem ---------- 打包逻辑 ---------- :do_pack if not exist "%H5_DIR%\" ( echo [错误] 找不到H5目录: %H5_DIR% exit /b 1 ) if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%" rem 用PowerShell生成稳定格式的时间戳,避免date格式差异 for /f "delims=" %%i in ('powershell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "STAMP=%%i" set "ZIP_FILE=%BUILD_DIR%\DemoGame_%STAMP%.zip" echo [打包] 正在压缩 %H5_DIR% powershell -ExecutionPolicy Bypass -Command "Compress-Archive -Path '%H5_DIR%\*' -DestinationPath '%ZIP_FILE%' -Force" if errorlevel 1 ( echo [错误] 打包失败 exit /b 1 ) echo [完成] 打包成功: %ZIP_FILE% exit /b 0 rem ---------- 解压逻辑 ---------- :do_unpack set "ZIP_PATH=%~2" if "%ZIP_PATH%"=="" ( echo [错误] 请指定zip文件路径 exit /b 1 ) if not exist "%ZIP_PATH%" ( echo [错误] 找不到zip文件: %ZIP_PATH% exit /b 1 ) rem 清理临时目录并解压 if exist "%TEMP_UNPACK_DIR%" rmdir /s /q "%TEMP_UNPACK_DIR%" mkdir "%TEMP_UNPACK_DIR%" echo [解压] 正在解压 %ZIP_PATH% powershell -ExecutionPolicy Bypass -Command "Expand-Archive -Path '%ZIP_PATH%' -DestinationPath '%TEMP_UNPACK_DIR%' -Force" if errorlevel 1 ( echo [错误] 解压失败 exit /b 1 ) rem 覆盖到H5目录 echo [同步] 正在覆盖到 %H5_DIR% if not exist "%H5_DIR%\" mkdir "%H5_DIR%" robocopy "%TEMP_UNPACK_DIR%" "%H5_DIR%" /e /is /it if %errorlevel% GEQ 8 ( echo [错误] 同步失败,错误码: %errorlevel% exit /b 1 ) echo [完成] 更新包已应用 exit /b 0把这段代码另存为pack.bat,放到项目的tools目录下,脚本就进入待用状态。使用时打开cmd进入tools目录,或者直接在资源管理器地址栏输入cmd再回车,然后执行:
pack.bat pack pack.bat unpack D:\Work\update\v1.2.3.zip4.2 关键代码段解析:为什么这么写
第一段:基础环境初始化。
@echo off setlocal enabledelayedexpansion chcp 65001 >nul@echo off关闭每行命令的回显,否则屏幕会被命令本身刷屏。setlocal enabledelayedexpansion开启延迟扩展,前面讲过的括号块变量更新问题就靠它解决。chcp 65001 >nul把当前代码页切成UTF-8,目的是让脚本文件即使以UTF-8保存,中文输出也正常。不过这里有个重要提醒:如果你的bat是用ANSI/GBK保存的,不要加这一行,否则中文反而会乱码。我在后面踩坑章节会细说编码问题。
第二段:路径变量集中定义。
set "SCRIPT_DIR=%~dp0" set "PROJECT_DIR=%SCRIPT_DIR%.." set "H5_DIR=%PROJECT_DIR%\bin\h5"%~dp0拿到脚本目录,..表示上一级。比如脚本在D:\Work\DemoGame\tools\下,PROJECT_DIR就会变成D:\Work\DemoGame\。这样换项目时只需要把脚本放到对应项目的tools目录,路径就自动适配了,不需要改一行代码。
第三段:参数路由。
set "ACTION=%~1" if "%ACTION%"=="" ( echo 用法: pack.bat pack 或 pack.bat unpack ^<zip路径^> exit /b 1 ) if /i "%ACTION%"=="pack" goto :do_pack if /i "%ACTION%"=="unpack" goto :do_unpack%~1是取第一个参数。/i参数让大小写不敏感,所以PACK、Pack都能识别。这里的exit /b 1是返回非零错误码,方便在CI、定时任务或LayaIDE的外部工具调用中判断脚本是否成功。
第四段:pack模块的时间戳与压缩。
时间戳获取用的是PowerShell命令而不是%date%。原因很简单:不同Windows版本、不同区域设置的%date%输出格式不一样,有的输出2025/03/14,有的输出03/14/2025,直接截取字符串非常不可靠。用Get-Date -Format yyyyMMdd_HHmmss能得到固定格式,再通过for /f把输出赋值给变量,这个写法就是前面语法部分讲的for /f文本解析。
for /f "delims=" %%i in ('powershell -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set "STAMP=%%i"第五段:unpack模块的解压与同步。
解压前先把临时目录清空,避免这个临时目录里残留上一次解压的文件,导致覆盖时多出脏数据。解压完成后,用robocopy把临时目录里的内容同步到H5目录。/e是复制所有子目录包括空目录,/is和/it是让相同文件也重新复制一遍,确保时间戳不同但内容相同的文件也能被刷新。
robocopy的错误码语法和普通命令不同:普通命令是0表示成功、非0表示失败,但robocopy把0到7都视为成功范围,8及以上才是失败。所以判断条件写成if %errorlevel% GEQ 8。这个细节如果不知道,很容易误判失败。
4.3 手工验证“开箱可用”的步骤清单
脚本写完不是说就完事了,我每次在新机器上跑都会按下面这个清单验证一遍:
- 把
pack.bat复制到项目tools目录,右键编辑确认编码是ANSI或UTF-8,并且和脚本开头的chcp设置保持一致。 - 打开cmd,执行
pack.bat不带参数,确认能打印用法提示并返回错误码1。 - 执行
pack.bat pack,等待压缩完成,去build目录确认zip文件生成,并双击打开抽查几个文件路径对不对。 - 手动构造一个只有几个文件的zip包,执行
pack.bat unpack xxx.zip,确认文件被正确覆盖到bin\h5。 - 故意把
H5_DIR改成一个不存在的路径,执行打包,确认脚本能打印“[错误]找不到H5目录”并退出。
如果这五步都通过,脚本才算达到“开箱可用”的状态。没有验证过的脚本,等于把风险原封不动地带到发版流程里。
4.4 一个可选的增强:打包前自动清理旧资源
Laya项目最坑的一个问题,是bin/h5目录里会残留上一版已删除的资源文件。如果这些文件一直没被清理,压缩包会越来越大,测试那边还可能因为资源名冲突加载到旧文件。
可以在do_pack之前增加一个clean模式,先把H5目录里的部分缓存清理掉。但这个操作比较激进,最好先做备份,或者至少把策略做成参数化。我的建议是别默认清理,而是让团队确认好哪些资源是运行时临时生成的,哪些是必须保留的,再把清理逻辑写成白名单式的删除列表。
5. 发布前要躲开的坑:编码、路径、权限与IDE集成
5.1 编码问题:UTF-8还是ANSI,取决于你怎么保存
编码是Bat脚本最容易翻车的地方,没有之一。核心规则是:脚本文件的保存编码,必须和解释器执行时的代码页匹配。
- 如果脚本用ANSI/GBK保存,在中文Windows的默认代码页936下输出中文是正常的,不需要加
chcp 65001。 - 如果脚本用UTF-8保存,应当用
chcp 65001切换到UTF-8代码页,否则中文注释和echo全是乱码。 - 如果脚本用UTF-8带BOM保存,问题最严重,第一行可能直接被cmd误解析,出现“系统找不到指定的批次标签”之类的诡异错误。
我实际采用的做法是:脚本里的echo提示文本尽量用英文,路径和文件名保持纯英文,中文只出现在注释里,并且文件统一保存为ANSI。这样在任何中文Windows上跑都不会乱码,也不用依赖chcp。如果团队编辑器默认保存UTF-8,那就在脚本开头加chcp 65001 >nul,同时确保文件确实是UTF-8无BOM。二者只能选一种,不能混搭。
5.2 路径空格与长路径:引号和反斜杠的细节
Laya项目路径经常带空格,比如D:\Work\My Game\bin\h5。脚本里每个路径赋值都用了set "VAR=路径",引用时也都加了双引号,这是最基础的防护。但还有两个容易忽略的小点。
第一点是if not exist判断目录时,路径末尾要带反斜杠。写if not exist "%H5_DIR%\"和写if not exist "%H5_DIR%"是有区别的,前者明确判断的是目录,后者对带扩展名的文件路径也有效。为了避免脏判断,我统一在目录判断时加反斜杠。
第二点是robocopy的目标目录结尾反斜杠。robocopy "%TEMP_UNPACK_DIR%" "%H5_DIR%" /e不会弹问题,但如果路径解析有问题会在日志里显示目标缺失。所以我习惯在目标目录后面也补一个反斜杠:robocopy "%TEMP_UNPACK_DIR%" "%H5_DIR%\" /e,把“这是一个目录”的语义写得更明确。
长路径是另一个隐患。Windows默认路径长度上限是260字符,Laya项目如果嵌套很深,比如D:\Work\CompanyName\LongProjectName\bin\h5\subfolder\...,可能触发路径超限。解决办法是开启系统的LongPathsEnabled策略,或者在脚本开头用subst把一个长路径映射成短盘符。这种极端情况我碰到过一次,后来在脚本注释里专门标注了这条注意事项。
5.3 权限问题:UAC、杀毒软件与执行策略
脚本如果只是读写项目目录下的文件,不需要管理员权限。但如果你把BUILD_DIR改到C:\Program Files之类的系统目录下,就会触发UAC弹窗,没人点“是”脚本就静默失败。所以目录尽量放在用户工作区。
杀毒软件是另一个隐形坑。有些公司的安全软件对批处理调PowerShell再调压缩的组合比较敏感,首次运行可能会拦截或弹确认框。遇到这种情况不要硬刚,直接把项目的tools目录加到安全软件的排除列表里,省得每次发版都提心吊胆。
PowerShell执行策略方面,脚本用的是-Command形式,不依赖.ps1脚本文件,所以大多数情况下不受ExecutionPolicy限制。我习惯加上-ExecutionPolicy Bypass,只是为了让个别机器上策略限制比较严格的情况也能顺利执行,这个参数只对当前进程生效,不会修改系统设置。
5.4 与LayaIDE和构建流程的联动
把Bat脚本接进Laya项目的日常构建流程,常用的方式有三种。
第一种,IDE外部工具方式。如果LayaIDE支持配置外部命令,可以新建一个外部工具项,命令填cmd.exe,参数填/c pack.bat pack,工作目录填脚本所在目录。这样在IDE里点一下就能触发打包。
第二种,手动双击方式。把pack.bat发送到桌面快捷方式,双击前按需修改快捷方式的目标,比如C:\Windows\System32\cmd.exe /c D:\Work\DemoGame\tools\pack.bat unpack D:\update\v1.2.zip。这种适合不熟悉命令行的美术或策划同事。
第三种,构建后自动触发。如果你的项目构建是脚本驱动的,编译完成后追加一行call tools\pack.bat pack,就能实现“编译完自动出zip包”。这里有个细节,最好用call而不是直接写pack.bat,因为直接执行子脚本会中断当前脚本的执行流程,call才能保证返回后继续执行后续命令。
5.5 日志与排错:让脚本失败时有据可查
最初版本脚本失败时只往屏幕打一行错误,当时没觉得有问题。后来有一次CI环境里跑挂了,但人不在现场,屏幕输出一闪而过,完全不知道哪一步出了错。从那以后我给所有关键步骤都加了日志输出,做法很简单:
set "LOG_FILE=%BUILD_DIR%\pack_%STAMP%.log" echo [开始] 打包日志 > "%LOG_FILE%" echo [打包] 正在压缩 %H5_DIR% >> "%LOG_FILE%" 2>&1 powershell -ExecutionPolicy Bypass -Command "..." >> "%LOG_FILE%" 2>&1>>是追加写入,2>&1是把错误输出也重定向到同一份日志。这样脚本失败后,直接打开日志文件就能看到是参数错误、路径找不到,还是PowerShell压缩命令本身报错。
进阶一点的做法是终身日志和独立日志分离:日常运行只记录当天汇总日志,每次打包再单独生成一份带时间戳的日志,方便按版本追溯。不过这个要看项目实际需要,不用一上来就设计得很重。
最后再分享一点个人体会
这套脚本在我项目里跑了两个多月,发布流程从原来的十几分钟变成了半分钟,而且再也没出过把旧资源带进更新包的问题。写Bat脚本这件事本身并不难,难的是把真实流程里那些隐含的细节都考虑到,比如编码、路径空格、目录判断、错误码语义。如果你也在Laya项目里为重复打包发愁,直接把文中的pack.bat拿过去改三个路径变量就能用。最后提醒一句,脚本的价值不是越复杂越好,而是把你每周都在重复的手工操作,变成一条稳定、可追溯、别人也能看懂的命令。