DOS获取当前批处理文件路径
%~dp0 完整详解(Windows 批处理 .bat / cmd)
1. 含义
%0 = 当前批处理文件本身(完整文件名)
修饰符 ~dp
d= Drive 盘符p= Path 路径
✅ %~dp0 = 当前 .bat 文件所在文件夹完整路径(末尾自带反斜杠 \)
2. 拆解所有常用 %~ 变量扩展(%0 专用)
假设脚本路径:D:\scripts\test.bat
| 表达式 | 结果 | 说明 |
|---|---|---|
%0 |
D:\scripts\test.bat |
原始完整路径 |
%~0 |
D:\scripts\test.bat |
去除外层引号 |
%~d0 |
D: |
只取盘符 |
%~p0 |
\scripts\ |
只取目录路径 |
%~dp0 |
D:\scripts\ |
盘符+目录(最常用) |
%~n0 |
test |
文件名(不含后缀) |
%~x0 |
.bat |
文件后缀 |
%~nx0 |
test.bat |
文件名+后缀 |
%~f0 |
D:\scripts\test.bat |
完整绝对路径 |
3. 典型示例
示例1:切换到脚本所在目录(高频用法)
@echo off
cd /d %~dp0
echo 当前脚本目录:%~dp0
cd /d必须加!跨盘符切换目录时生效(C盘→D盘)
示例2:调用同目录下程序
start "" "%~dp0app.exe"
建议加上双引号,防止路径包含空格:
"%~dp0app.exe"
4. 重要坑点
-
末尾自带
\
❌ 错误写法:%~dp0\app.exe→ 变成D:\scripts\\app.exe(双斜杠,虽然大多能运行,不规范)
✅ 正确写法:"%~dp0app.exe" -
仅在 .bat/cmd 脚本内有效!
直接在 cmd 窗口手动输入%~dp0会无效,这是批处理脚本内置参数扩展语法,不是环境变量。 -
管理员运行不改变
%~dp0
不管右键“以管理员身份运行”,%~dp0始终是 bat 文件存放位置,不受工作目录影响。
5. PowerShell 等价写法
PowerShell 没有 %~dp0,对应:
$PSScriptRoot
# 带末尾反斜杠版本
$PSScriptRoot + "\"

浙公网安备 33010602011771号