160 lines
5.5 KiB
Batchfile
160 lines
5.5 KiB
Batchfile
@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 |