bat脚本打tar包命令,傻瓜指引模式操作,DevOps

为了方便将指定文件打成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. 打包完成
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker.our

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值