批处理脚本的运行目录跳转注意

问题引出:批处理脚本不能像powershell一样直接cd到不同盘符的任意位置

🔧批处理的一些扩展符号

符号 作用
%~0 删除路径中的引号
%~f0 将 %0 扩展到一个完全合格的路径名
%~d0 将 %0 扩展到一个驱动器号
%~p0 将 %0 扩展到一个路径
%~n0 将 %0 扩展到一个文件名
%~x0 将 %0 扩展到一个文件扩展名
%~s0 将 %0 扩展的路径只含有短名
%~a0 将 %0 扩展到文件的文件属性
%~t0 将 %0 扩展到文件的日期/时间
%~z0 将 %0 扩展到文件的大小

传入参数

test.bat arg1 arg2 arg3
:: 其中 %0 指文件的绝对路径 %1 %2...指的是传入参数

示例代码

@echo off
rem 1.获取批处理自身的完整路径
echo %0
rem 2.获取批处理自身的完整路径,并去掉首尾的引号
echo %~0
rem 3.获取批处理自身的文件名和后缀名
echo %~nx0
rem 4.获取批处理自身的文件名
echo %~n0
rem 5.获取批处理自身的后缀名
echo %~x0
rem 6.获取批处理自身的完整路径,不含文件名
echo %~dp0
rem 7.获取批处理自身的盘符
echo %~d0
rem 8.获取批处理自身的大小
echo %~z0
rem 9.获取批处理自身的修改时间
echo %~t0
rem 上面的字母可以组合获得其他效果,例如 %~dpn0 为不含扩展名的文件路径
pause

切换到不同盘符运行

可以使用 %~d1 && cd %1cd /d %1 来切换到 %1 入参指定的路径运行

@echo off

echo 一键清除目录 keil mdk 编译垃圾

if exist "%1" (
    echo 指定目录 %1

    :: %~d1
    :: cd %1
    :: 上面两句和下面的这句效果一样
    cd /d %1

    del *.bak /s
    del *.lst /s
    del *.obj /s
    del *.o /s
    del *.d /s
) else (
    echo 未找到目录
)