AIGC标识 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. 重要坑点

  1. 末尾自带 \
    ❌ 错误写法:%~dp0\app.exe → 变成 D:\scripts\\app.exe(双斜杠,虽然大多能运行,不规范)
    ✅ 正确写法:"%~dp0app.exe"

  2. 仅在 .bat/cmd 脚本内有效!
    直接在 cmd 窗口手动输入 %~dp0 会无效,这是批处理脚本内置参数扩展语法,不是环境变量。

  3. 管理员运行不改变 %~dp0
    不管右键“以管理员身份运行”,%~dp0 始终是 bat 文件存放位置,不受工作目录影响。

5. PowerShell 等价写法

PowerShell 没有 %~dp0,对应:

$PSScriptRoot
# 带末尾反斜杠版本
$PSScriptRoot + "\"
posted @ 2026-07-28 17:21  X2009  阅读(19)  评论(0)    收藏  举报