Bat 目标是文件名还是目录名?

本文将介绍怎样解决“目标 F:\IDEASpace\fclient-demo\fclient 是文件还是目录名 (F=文件,D=目录)?”问题。

最近项目使用 UMI + react 实现前端,代码编写好后都需要运行 yarn build 打包。打包后需要将打包好的 dist 目录内容拷贝发包和部署,感觉很麻烦!于是就打算编写一个 bat 脚本实现自动编译和打包。

脚本主要完成下面几件事情:

  • 创建发包目录

  • 判断发包目录是否存在。如果存在,则删除历史包;如果不存在,则创建一个空目录;

  • 执行 yarn 编译项目,下载依赖等

  • 执行 yarn build 构建项目,项目构建完成后将在项目目录多出一个 dist 目录,该目录就是项目的发包内容

  • 利用 xcopy 将 dist 内容拷贝到发包目录

  • 利用 xcopy 将项目的其他资源也拷贝到发包目录

批处理脚本内容如下:

@echo off
set bastPath=%~dp0
set relasePath=%bastPath:~0,-1%\fclient

if not exist %relasePath% (
    mkdir %relasePath%
    goto envi_ok
)

rem 删除历史目录
rd /s/q %relasePath%

:envi_ok
cd %bastPath:~0,-1%\fclient-web

echo 开始编译项目...
call yarn

echo.
echo 开始构建项目...
call yarn build
echo.

echo 开始打包...
cd %bastPath:~0,-1%
xcopy /e /h /q /y %bastPath:~0,-1%\fclient-web\dist %bastPath:~0,-1%\fclient
xcopy /e /h /q /y %bastPath:~0,-1%\vgsax %bastPath:~0,-1%\fclient\vgsax

echo finished.
pause

执行脚本的结果如下图:

你会发现,在执行脚本 xcopy 时抛出了 “目标 F:\IDEASpace\fclient-demo\fclient 是文件还是目录名 (F=文件,D=目录)?” 导致出现这个原因是因为我们在 xcopy 命令的目标路径最后面没有添加 “\”,如果你添加了 “\” 则系统将会自动识别出该路径是目录。修改如下:

xcopy /e /h /q /y %bastPath:~0,-1%\fclient-web\dist %bastPath:~0,-1%\fclient\
xcopy /e /h /q /y %bastPath:~0,-1%\vgsax %bastPath:~0,-1%\fclient\vgsax\

搞定了!


游手好闲地学习,并不比学习游手好闲好。 —— 约翰·贝勒斯
0 不喜欢
说说我的看法
全部评论(
没有评论
热门标签
热门文章
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com