bat - 常用功能

Reference:

批处理(bat)语法_批处理 %%~ta %%~tb-优快云博客

bat批处理脚本学习(二)_bat mkdir-优快云博客

批处理(bat)中的数组问题_bat 数组-优快云博客

:: 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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值