Reference:
批处理(bat)语法_批处理 %%~ta %%~tb-优快云博客
:: region api 说明
:: echo 关键字
:: (1) echo on (打开回显) echo off (关闭回显)
:: (2)@字符放在命令前将关闭该命令回显。 @echo off与@echo on都是不回显。
:: (3)建立新文件:echo 文件内容>文件名
:: (4)增加文件内容:echo 文件内容>>文件名。
:: (5)echo. 相当于输入一个回车。
:: set 关键字
:: (1)设置变量
:: (2)set /p 变量名 = 等号后面会拉起屏幕让用户自己输入
:: pause 关键字
:: (1)停止系统命令的执行。运行显示为:请按任意键继续。
:: (2)显示其他提示语:echo 提示语 & pause > nul
:: rem 关键字
:: (1)rem注释,命令后的内容不执行,但会回显。
:: (2)@rem注释,命令后的内容不执行,也不回显。
:: :: 关键字
:: (1):注释,命令后的内容执行但是不回显。无论是否启用echo on。
:: start 关键字
:: (1)调用外部程序的命令,如:执行study.exe并且输入两个参数,分别为1、10。start study.exe 1 10
:: call 关键字
:: (1)在批处理执行过程中调用另一个批处理,当另一个批处理执行完后,再继续执行原来的批处理。
:: if 关键字
:: (1)if not exist
:: (2)if not str1 == str2
:: %~dp0
:: (1)获取当前路径
:: %变量名%
:: (1)引用变量
:: rd /S/Q 文件夹路径
:: (1)删除文件夹
:: errorlevel
:: (1)程序返回码,使用方式: echo %errorlevel%
:: (2)每个命令运行结束,可以用这个命令行格式查看返回码,用于判断刚才的命令是否执行成功,默认值为0,一般命令执行出错会设 errorlevel 为1
:: title关键字
:: (1)设置cmd窗口的标题 使用方式:title 新标题
:: exist 关键字 退出
:: mkdir 创建新目录
:: (1)mkdir \a\b\c\d 创建abcd四个文件夹,如果都不存在的话
:: (2)rd /s /q test2 删除test2目录
:: %0 指批处理文件自身
:: %~d0 指该批处理文件所在的根盘符
:: %~dp0 指该批处理文件所在的路径
:: cd %~dp0 指进入该批处理所在的目录
:: endregine
文件夹同步
set source_path=f:/A/
set target_path= f:/B/
xcopy "%source_path%/*.*" %target_path%/ /s /e /d /y /c
文件夹软链接
mklink /D|/H|/J dest source
@rem version 1 : 建立目录软连接 可以手动输入完整目录,也可以直接拖拽目录
echo off
echo "================ start ================"
echo
@rem 添加标记点,标记名为RestStart 用于后面执行goto跳转到标记点
:RestStart
set /p LinkTo=plaese enter you want to link to path:
set /p LinkFrom=plaese enter you want to link from path:
@rem get the last file name,link 的 to路径要与from路径具备相同的末尾文件名,否则会选取to路径最后一个文件夹名称来建议链接
for /f "delims=" %%a in ("%LinkFrom%") do (
for %%I in (%LinkFrom%) do (
echo %%~na%%~xI
set LinkTo=%LinkTo%\%%~na%%~xI
)
)
echo "log path ... "
echo "link to path : %LinkTo%"
echo "link from path : %LinkFrom%"
mklink /j %LinkTo% %LinkFrom%
echo "=============== end ================="
@rem 跳转到 RestStart 标记处
goto RestStart
rem pause
@rem version 1 : 建立目录软连接 ,自定义目录,link 的 to路径要与from路径具备相同的末尾文件名,否则会选取to路径最后一个文件夹名称来建议链接
echo off
echo "================ create directory link ================"
set linkFromSubPath=FolderA\Assets\Res
set linkToSubPath=FolderB\Assets\Res
set curDir=%~dp0
set curDiskDir=%~d0
set linkFromPath=%curDir%%linkFromSubPath%
set linkToPath=%curDir%%linkToSubPath%
echo "log path ..."
echo "curDir : %curDir%"
echo "curDiskDir : %curDiskDir%"
echo "linkFromPath : %linkFromPath%"
echo "linkToPath : %linkToPath%"
@REM 如果不存在目录则创建目录
if exist "%linkToPath%" (
rmdir "%linkToPath%"
)
mklink /j "%linkToPath%" "%linkFromPath%"
pause
@rem exist
使用数组和for循环 批量建立软连接
echo off
echo "================ create directory link ================"
@REM for循环内取值存在变量延迟问题,添加此句才能正常访问数组元素
setlocal enabledelayedexpansion
SET LinkFolder[0]=目录1
SET LinkFolder[1]=目录2
SET LinkFolder[2]=目录3
SET LinkFolder[3]=目录4
SET LinkFolder[4]=目录5
SET LinkFolder[5]=目录6
SET LinkFolder[6]=目录7
SET LinkFolder[7]=目录8
SET curDir=%~dp0
echo "[log] curDir : %curDir%"
@REM 轮询数据元素,建立软连接S
@REM for 循环中的 /L 将允许遍历数组元素。范围(0,1,4) 是列表的开始、增量和结束索引。
@REM 也就是从索引 0 开始,在每个循环之后递增 1,直到我们在列表的索引中达到数字 4。
for /l %%n in (0,1,0) do (
@REM for循环内设置变量,需要使用""符号包起来,并且调用内部变量的值需要使用!!包起来
set "fileName=!LinkFolder[%%n]!"
echo "[log] fileName : !fileName!"
set "linkFrom=%curDir%..\Development\Assets\!fileName!"
set "linkTo=%curDir%Assets\!fileName!"
echo "[log] linkFrom : !linkFrom!"
echo "[log] linkTo : !linkTo!"
@REM 存在目录,删除目录
if exist "!linkTo!" (
@REM @REM 存在目录,询问删除
@REM rmdir /s "!linkTo!"
@REM 存在目录,静默(自动)删除
rmdir /s /q "!linkTo!"
)
mklink /j "!linkTo!" "!linkFrom!"
)
echo "================ complete ================"
pause
@rem exist
git base版本:
# ***路径不允许有中文***
#!/bin/bash
function Pause() {
read -n 1 -s -p "$*" INP
if [ "$INP" != '' ]; then
echo -ne '\b \n'
fi
}
windows() { [[ -n "$WINDIR" ]]; }
ToWindowPath() {
npath=$1
if [ "${1:0:1}" == "/" ]; then
npath=${npath#\/*}
npath=${npath/\//:\/}
fi
npath=${npath//\//\\}
echo $npath
}
# link source linkName
link() {
if windows; then
createlink=$(ToWindowPath $2)
source=$(ToWindowPath $1)
if [[ -d "$1" ]]; then
cmd <<<"mklink /D $createlink $source" >/dev/null
else
cmd <<<"mklink $createlink $source" >/dev/null
fi
else
ln -s "$1" "$2"
fi
}
echo "============= 创建资源软链接 =============="
curdir=$(
cd $(dirname $0)
pwd
)
# 当前目录的上一级目录中的FolderA
linkFromRoot=$curdir/../FolderA
linkToRoot=$curdir
linkFrom=$linkFromRoot/Assets/Res
linkTo=$linkToRoot/Assets/Resource/Res
echo "[log] linkFrom path : $linkFrom"
echo "[log] linkTo path : $linkTo"
if [ ! -d "$linkTo" ]; then
link $linkFrom $linkTo
else
echo "link target dir "$linkTo" exist, link failed."
fi
echo "============= complete =============="
Pause