批处理脚本的运行目录跳转注意
问题引出:批处理脚本不能像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 %1
和 cd /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 未找到目录
)