Files
zimoyin 398e014128 init
2026-04-09 13:55:39 +08:00

160 lines
5.5 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@echo off
setlocal enabledelayedexpansion
:: 定义基础变量
set "BUILD_DIR=build"
set "OPM_ECTMS=opm_ectms"
set "WEBMAN_BIN=webman.bin"
@REM set "PHP_PATH=php" :: 默认值(系统环境变量中的 PHP)
set "PHP_PATH=D:\AppData\sdk\php-8.4\php.exe" :: 默认值(系统环境变量中的 PHP)
:: 关键修复:处理 PowerShell 传递的参数(自动清理引号、兼容特殊路径)
if not "%~1"=="" (
:: 接收传入参数,自动去除 PowerShell 可能添加的单/双引号
set "INPUT_PHP=%~1"
set "INPUT_PHP=!INPUT_PHP:'=!" :: 去除单引号
set "INPUT_PHP=!INPUT_PHP:"=!" :: 去除双引号
set "PHP_PATH=!INPUT_PHP!"
:: 验证 PHP 路径是否存在(兼容带空格/特殊字符的路径)
if not exist "!PHP_PATH!" (
echo ❌ 错误:传入的 PHP 路径不存在!实际路径:!PHP_PATH!
pause
exit /b 1
)
echo ℹ️ 已使用传入的 PHP 路径:!PHP_PATH!
) else (
echo ℹ️ 未传入 PHP 路径,使用系统默认 PHP(需添加到环境变量)
)
:: 切换到脚本所在目录(兼容 PowerShell 中调用的路径问题)
cd /d "%~dp0" 2>nul || (
echo ❌ 错误:无法切换到脚本所在目录,请检查脚本路径是否正确!
pause
exit /b 1
)
:: 检查并创建 build 文件夹
if not exist "%BUILD_DIR%" (
echo ⚠️ 未找到 build 目录,正在自动创建...
md "%BUILD_DIR%" 2>nul || (
echo ❌ 错误:build 目录创建失败,请检查权限!
pause
exit /b 1
)
echo ✅ build 目录创建成功!
)
:: 1. 清理旧文件
echo.
echo 1 🧹 清理旧文件...
if exist "%BUILD_DIR%\%WEBMAN_BIN%" (
del /f /q "%BUILD_DIR%\%WEBMAN_BIN%" 2>nul && (
echo ✅ 已删除旧的 %WEBMAN_BIN% 文件
) || (
echo ⚠️ 警告:无法删除旧的 %WEBMAN_BIN% 文件(可能被占用)
)
) else (
echo ️ 未找到旧的 %WEBMAN_BIN% 文件,无需清理
)
:: 2. 运行 PHP 构建命令(核心修复:用 call 确保 errorlevel 正确传递)
echo.
echo 2 🔧 执行构建命令:"!PHP_PATH!" -d phar.readonly=0 ./webman build:bin
echo ℹ️ 当前使用的 PHP 路径:!PHP_PATH!
call "!PHP_PATH!" -d phar.readonly=0 ./webman build:bin
:: 关键修复:用更兼容的 errorlevel 判断方式(避免 PowerShell 解析冲突)
if errorlevel 1 (
echo.
echo ❌ 错误:PHP 构建命令执行失败!
echo ️ 可能原因:
echo 1. PHP 路径不正确(当前路径:!PHP_PATH!)
echo 2. PHP 未添加到系统环境变量(未传入路径时)
echo 3. webman 脚本不存在或项目依赖缺失
echo 4. 缺少 phar 扩展或权限不足
pause
exit /b 1
)
:: 检查构建结果
if not exist "%BUILD_DIR%\%WEBMAN_BIN%" (
echo.
echo ❌ 错误:构建失败!未生成 %WEBMAN_BIN% 文件
pause
exit /b 1
)
echo ✅ 构建成功,已生成 %WEBMAN_BIN% 文件
:: 3. 备份旧文件
echo.
echo 3 🔧 备份旧的 %OPM_ECTMS% 文件...
if exist "%BUILD_DIR%\%OPM_ECTMS%" (
:: 获取文件修改时间(兼容 PowerShell 中的日期格式)
for /f "delims=" %%a in ('powershell -Command "(Get-Item -Path '%BUILD_DIR%\%OPM_ECTMS%' -ErrorAction SilentlyContinue).LastWriteTime.ToString('yyyyMMdd-HH')"') do (
set "FILE_MOD_TIME=%%a"
)
:: 处理时间获取失败的情况
if "!FILE_MOD_TIME!"=="" set "FILE_MOD_TIME=%date:~0,4%%date:~5,2%%date:~8,2%-%time:~0,2%"
set "OLD_OPM_ECTMS=%OPM_ECTMS%.!FILE_MOD_TIME!"
:: 避免备份文件重名
if exist "%BUILD_DIR%\!OLD_OPM_ECTMS!" set "OLD_OPM_ECTMS=!OLD_OPM_ECTMS!.bak"
:: 执行备份(兼容带空格的文件名)
ren "%BUILD_DIR%\%OPM_ECTMS%" "!OLD_OPM_ECTMS!" 2>nul && (
echo ✅ 旧文件已备份为:!OLD_OPM_ECTMS!
) || (
echo ⚠️ 警告:旧文件备份失败(可能被占用),将直接覆盖!
)
) else (
echo ️ 未找到旧的 %OPM_ECTMS% 文件,无需备份
)
:: 4. 重命名文件
echo.
echo 4 🔄 重命名文件:%WEBMAN_BIN% -> %OPM_ECTMS%
ren "%BUILD_DIR%\%WEBMAN_BIN%" "%OPM_ECTMS%" 2>nul && (
echo ✅ 重命名成功!
) || (
echo ❌ 错误:重命名失败(目标文件可能被占用)
pause
exit /b 1
)
:: 5. 权限提示(Windows 环境)
echo.
echo 5 🔑 配置文件权限...
echo ✅ Windows 环境下可执行权限已默认启用
echo ️ 文件路径:%BUILD_DIR%\%OPM_ECTMS%
:: 6. 计算 SHA256 哈希(兼容 PowerShell 中的文件路径)
echo.
echo 6 📊 计算 %OPM_ECTMS% 的 SHA256 哈希值...
set "HASH_VALUE="
for /f "delims=" %%a in ('powershell -Command "(Get-FileHash -Path '%BUILD_DIR%\%OPM_ECTMS%' -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash"') do (
set "HASH_VALUE=%%a"
)
if "!HASH_VALUE!"=="" (
echo ⚠️ 警告:哈希值计算失败(文件可能不存在或无权限)
) else (
echo ✅ 哈希值计算完成:
echo SHA256: !HASH_VALUE!
)
:: (可选)保存哈希值到文件
:: if "!HASH_VALUE!" neq "" (
:: echo !HASH_VALUE! > "%BUILD_DIR%\%OPM_ECTMS%.sha256"
:: echo ️ 哈希值已保存到:%BUILD_DIR%\%OPM_ECTMS%.sha256
:: )
:: 最终结果展示
echo.
echo.
echo ==============================================
echo ✅ 所有操作已全部执行完毕!
echo 📁 最终文件位置:%BUILD_DIR%\%OPM_ECTMS%
echo 📊 文件 SHA256!HASH_VALUE!
echo 🖥️ 使用的 PHP 路径:!PHP_PATH!
echo ==============================================
pause