为了方便将指定文件打成tar包,用于上传和发布,并且保留打包时间的痕迹,于是我设计了一下打包脚本
这是一个在window上运行的脚本,linux上运行的暂时还没有需求,如果有的话考虑用shell命令写一套
打包逻辑如下:
1、提示版本存储目录
2、更新版本号
3、进入打包流程
4、打包完成
@echo off
setlocal enabledelayedexpansion
chcp 65001
REM 提示版本存储目录
echo.
echo 1、正在创建版本存储目录, 默认脚本所在目录为: %~dp0
set /p "versionDir=请输入版本存储目录(如: D:\test):"
if "%versionDir%"=="" (
set "versionDir=%~dp0versionHub"
) else (
set "versionDir=%versionDir%\versionHub"
)
REM 检查versionHub文件夹是否存在,存在继续执行, 否则创建
if exist "%versionDir%" (
echo.
echo 已选择目录: %versionDir%
echo.
) else (
mkdir "%versionDir%"
echo.
echo 已创建目录: %versionDir%
echo.
)
REM 更新版本号
for /f "tokens=2-4 delims=/ " %%a in ('date /t') do (
set "year=%%c"
set "month=%%a"
set "day=%%b"
)
set "versionDate=%year:~-2%%month%%day%"
set "versionTime=%time:~0,2%%time:~3,2%%time:~6,2%"
set "versionPath=%versionDir%\%versionDate%\%versionTime%"
mkdir "%versionPath%"
echo.
echo 版本号已更新为: %versionDate%-%versionTime%
echo.
REM 打包流程
echo.
echo 2. 打包流程:
echo.
echo 默认脚本所在目录中存在source目录, source目录中存在需要打包的项目文件夹, 默认打包指定项目文件夹中的app文件夹和assets文件夹, 如果需要打包其他文件夹, 可以根据提示输入时用空格分隔
echo.
set "sourcePath=%~dp0source"
if not exist "%sourcePath%" (
echo.
echo %sourcePath% 不存在, 请检查输入的文件夹路径是否正确
echo.
chcp 65001
setlocal enabledelayedexpansion
set /p "sourceTemp=请输入项目所在的父级文件夹绝对路径(如: D:\test\source):"
if not exist "!sourceTemp!" (
echo.
echo %sourceTemp% 不存在, 请检查输入的文件夹路径是否正确
pause
goto :EOF
) else (
set "sourcePath=!sourceTemp!"
)
)
:: 判断source目录中是否存在需要打包的项目文件夹
chcp 65001
set /p "foldersToPackage=请输入提示需要打包的项目名称(只支持单个项目):"
if "%foldersToPackage%"=="" (
echo.
echo 输入的文件夹路径不存在, 请检查输入的文件夹路径是否正确。
pause
goto :EOF
)
set "folderExist=0"
if not exist "%sourcePath%\%foldersToPackage%" (
set /a folderExist+=1
)
if !folderExist! gtr 0 (
echo.
echo %foldersToPackage% 输入的文件夹路径不存在, 请检查输入的文件夹路径是否正确。
pause
goto :EOF
) else (
set "sourcePath=%sourcePath%\%foldersToPackage%"
)
:: 判断是否需要打包其他文件夹
chcp 65001
set /p "toPackage=请输入需要打包的文件夹的相对路径名称(用空格分隔, 例如: 在test项目下的a文件夹和b文件夹: a b, 为空则默认打包app和assets):"
if "!toPackage!"=="" (
set "toPackage=app assets"
)
:: 判断输入的文件夹的相对路径是否存在, 如果都不存在, 则提示错误
set "folderExist=0"
for %%i in (!toPackage!) do (
if not exist "%sourcePath%\%%i" (
set /a folderExist+=1
)
)
if !folderExist! gtr 0 (
echo.
echo 输入的文件夹路径不存在, 请检查输入的文件夹路径是否正确。
pause
goto :EOF
)
:: toPackage是用空格隔开的路径地址,将sourcePath+每一个路径拼接, 最后用空格分割 保存到foldersToPackage中
set "allFoldersToPackage="
for %%i in (!toPackage!) do (
set "allFoldersToPackage=!allFoldersToPackage! %sourcePath%\%%i"
)
set "foldersToPackage=%allFoldersToPackage%"
:: 判断是否输入了文件夹路径
if "%foldersToPackage%"=="" (
echo.
echo 请输入需要打包的文件夹的绝对路径(用空格分隔): 例如: D:\test
pause
goto :EOF
) else (
:: 判断输入的文件夹路径是否存在, 如果都不存在, 则提示错误
set "folderExist=0"
for %%i in (%foldersToPackage%) do (
if not exist "%%i" (
set /a folderExist+=1
)
)
if !folderExist! gtr 0 (
echo.
echo 输入的文件夹路径不存在, 请检查输入的文件夹路径是否正确。
pause
goto :EOF
)
)
:: 创建temp文件夹并打包文件夹
if not exist "%versionPath%" (
echo.
echo %versionPath% 不存在, 请检查输入的文件夹路径是否正确。
pause
goto :EOF
) else (
echo.
echo 正在打包...
echo.
mkdir "%versionPath%\temp" >nul
for %%i in (%foldersToPackage%) do (
@REM 复制路径最后一个目录下的内容到temp文件夹下, 并以该文件夹名命名
for /f "delims=" %%j in ("%%i") do (
xcopy "%%j\*" "%versionPath%\temp\%%~nxj\" /s /e /y >nul
)
)
REM 移动打包好的文件
move "%versionPath%\temp" "%versionPath%\%versionDate%%versionTime%_release" >nul
REM 将打包好的文件夹里面的内容压缩为一个tar文件, 不要外层文件夹, 解压就是文件夹里面的内容
tar -cvf "%versionPath%\%versionDate%%versionTime%_release.tar" -C "%versionPath%\%versionDate%%versionTime%_release" . >nul 2>nul
rmdir /s /q "%versionPath%\%versionDate%%versionTime%_release" >nul
echo.
echo 已删除临时文件夹: %versionPath%\%versionDate%%versionTime%_release
echo.
echo 3. 打包完成
echo.
REM 打开release文件夹
explorer "%versionPath%"
)
:EOF
endlocal
exit /b
执行效果如下
执行该脚本文件:versionPack.bat
Active code page: 65001
1、正在创建版本存储目录, 默认脚本所在目录为: W:\workonlinedesk\chargingCloud\
请输入版本存储目录(如: D:\test):
已选择目录: W:\workonlinedesk\chargingCloud\versionHub
版本号已更新为: 01202308-130224
2. 打包流程:
默认脚本所在目录中存在source目录, source目录中存在需要打包的项目文件夹, 默认打包指定项目文件夹中的app文件夹和assets文件
夹, 如果需要打包其他文件夹, 可以根据提示输入时用空格分隔
Active code page: 65001
请输入提示需要打包的项目名称(只支持单个项目):
输入的文件夹路径不存在, 请检查输入的文件夹路径是否正确。
Press any key to continue . . .
W:\workonlinedesk\chargingCloud>versionPack.bat
Active code page: 65001
1、正在创建版本存储目录, 默认脚本所在目录为: W:\workonlinedesk\chargingCloud\
请输入版本存储目录(如: D:\test):
已选择目录: W:\workonlinedesk\chargingCloud\versionHub
版本号已更新为: 01202308-130239
2. 打包流程:
默认脚本所在目录中存在source目录, source目录中存在需要打包的项目文件夹, 默认打包指定项目文件夹中的app文件夹和assets文件夹, 如果需要打包其他文件夹, 可以根据提示输入时用空格分隔
Active code page: 65001
请输入提示需要打包的项目名称(只支持单个项目):backenddatacenter
Active code page: 65001
请输入需要打包的文件夹的相对路径名称(用空格分隔, 例如: 在test项目下的a文件夹和b文件夹: a b, 为空则默认打包app和assets):
正在打包...
已删除临时文件夹: W:\workonlinedesk\chargingCloud\versionHub\01202308\130239\01202308130239_release
3. 打包完成