转 批处理 %~dp0的意义

%~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录
cd是转到这个目录,不过我觉得cd /d %~dp0 还好些

选项语法:

~0 - 删除任何引号("),扩充 %0
%~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 - 仅将 %0 扩充到一个驱动器号
%~p0 - 仅将 %0 扩充到一个路径
%~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 - 仅将 %0 扩充到一个文件扩展名
%~s0 - 扩充的路径只含有短名(“s”为Short,短的)
%~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 - 将 %0 扩充到文件的大小(Size 大小)
%~$PATH:0 - 查找列在路径环境变量的目录,并将 %0 扩充
到找到的第一个完全合格的名称。如果环境变量名
未被定义,或者没有找到文件,此组合键会扩充到
空字符串

可以组合修饰符来得到多重结果:

%~dp0 - 仅将 %0 扩充到一个驱动器号和路径
%~nx0 - 仅将 %0 扩充到一个文件名和扩展名
%~fs0 - 仅将 %0 扩充到一个带有短名的完整路径名
%~dp$PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
到找到的第一个驱动器号和路径。
%~ftza0 - 将 %0 扩充到类似输出线路的 DIR

%0为当前批处理文件
如果0换成1为第一个文件,2为第2个
在这个脚本基础上优化 @echo off setlocal enabledelayedexpansion :: ---------------------------- :: 基础配置(可修改区域) :: ---------------------------- set “UV=F:\Software\keil5\core\UV4\UV4.exe” set “project_root=%~dp0Multi_project” :: 工程根目录 :: ---------------------------- :: 命令行参数处理 :: ---------------------------- if not “%~1”==“” ( set “TARGET_PROJECT=%~1” call :validate_project call :compile exit /b %errorlevel% ) :: ---------------------------- :: 自动检测所有子工程 :: ---------------------------- echo Scanning projects in: %project_root% set “project_count=0” for /d %%a in (“%project_root%*”) do ( set /a “project_count+=1” set “project_name=%%~nxa” set “project_list=!project_list! !project_name!” ) echo Found %project_count% project(s) :: ---------------------------- :: 主编译流程 :: ---------------------------- for %%a in (%project_list%) do ( set “TARGET_PROJECT=%%a” call :compile if errorlevel 1 ( echo [ERROR] Build failed for: %%a exit /b 1 ) ) exit /b 0 :: ---------------------------- :: 子程序:工程验证 :: ---------------------------- :validate_project if not exist “%project_root%%TARGET_PROJECT%” ( echo [ERROR] Project not exist: %TARGET_PROJECT% exit /b 2 ) if not exist “%project_root%%TARGET_PROJECT%%TARGET_PROJECT%_MCU.uvmpw” ( echo [ERROR] Project file missing: %TARGET_PROJECT%_MCU.uvmpw exit /b 3 ) exit /b 0 :: ---------------------------- :: 子程序:编译流程 :: ---------------------------- :compile echo. echo [INFO] Building project: %TARGET_PROJECT% :: 路径配置(自动生成带时间戳的日志文件) set “build_log=%~dp0logs%TARGET_PROJECT%%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%.log” set “uvproj_path=%project_root%%TARGET_PROJECT%%TARGET_PROJECT%_MCU.uvmpw” :: 清理并创建日志目录 if not exist "%~dp0logs" md “%~dp0logs” break > “%build_log%” :: 执行编译命令 echo Project file: %uvproj_path%%UV%-j0 -r “%uvproj_path%-o “%build_log%” :: ---------------------------- :: 错误检查 :: ---------------------------- if not exist “%build_log%” ( echo [ERROR] Log file missing: %build_log% exit /b 4 ) type “%build_log%” | findstr /i /r “<Error>” “<error(s)>” “<错误>” if %errorlevel% equ 0 ( echo [ERROR] Compilation failed: %TARGET_PROJECT% exit /b 1 ) echo [SUCCESS] Build completed: %TARGET_PROJECT% exit /b 0
03-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值