Windows batch scripts

330 阅读3分钟

在 Windows 批处理脚本中,%~dp0 是一个特殊的参数扩展语法,用于获取当前正在执行的批处理文件的路径信息。下面我将详细解释这个语法,并列出 Windows 批处理中所有类似的参数扩展用法。

1. %~dp0 详解

%~dp0 由三部分组成:

  • %0:表示批处理文件本身
  • ~d:提取驱动器字母(drive letter)
  • ~p:提取路径(path)

组合起来:

  • %~dp0:返回当前批处理文件所在的完整路径(包含驱动器字母和路径)

示例:

@echo off
echo 当前脚本路径是:%~dp0
pause

如果脚本位于 C:\projects\build.bat,输出将是:

当前脚本路径是:C:\projects\

2. Windows 批处理中所有类似的参数扩展语法

以下是完整的参数扩展修饰符列表(适用于 %0-%9%*):

修饰符描述示例
%~删除外围引号"file.txt"file.txt
%~d提取驱动器字母C:\dir\file.txtC:
%~p提取路径(不含驱动器和文件名)C:\dir\file.txt\dir\
%~n提取文件名(不含扩展名)file.txtfile
%~x提取文件扩展名file.txt.txt
%~s转换为短路径(8.3格式)Program FilesPROGRA~1
%~a提取文件属性--a------
%~t提取文件时间戳2023-01-01 10:00
%~z提取文件大小(字节)1024
%~$PATH:I在 PATH 中搜索文件并扩展

3. 组合用法

这些修饰符可以组合使用:

组合描述示例输入示例输出
%~dp0脚本所在目录的完整路径C:\scripts\test.batC:\scripts\
%~nx0脚本文件名(含扩展名)C:\scripts\test.battest.bat
%~nxf任意文件的全名(变量替换f)C:\docs\file.txtfile.txt
%~dpnx1第一个参数的完整路径"C:\temp\test.txt"C:\temp\test.txt

4. 实际应用示例

@echo off
echo 脚本完整路径:%~f0
echo 脚本所在驱动器:%~d0
echo 脚本所在目录:%~p0
echo 脚本名称:%~n0
echo 脚本扩展名:%~x0
echo 脚本短路径:%~s0
echo 脚本属性:%~a0
echo 脚本修改时间:%~t0
echo 脚本大小:%~z0 字节
pause

5. 特殊变量扩展

除了 %0,其他参数也可以使用这些修饰符:

  • %1-%9:脚本参数
  • %*:所有参数

示例:

@echo off
echo 第一个参数的完整路径:%~dpnx1
echo 所有参数:%*

6. 注意事项

  1. 这些扩展只能用于批处理参数(%0-%9%*),不能用于普通变量
  2. 路径中包含特殊字符(如空格)时,建议用引号包裹
  3. 短路径(%~s)可能在不同系统上表现不同
  4. 文件属性(%~a)的格式为:d(目录)、a(存档)、r(只读)、h(隐藏)、s(系统)

7. 在变量中使用(间接扩展)

如果需要处理变量中的路径,可以使用 %%~ 语法(在 for 循环中):

@echo off
set "file=C:\Program Files\test.txt"

for %%F in ("%file%") do (
    echo 文件名:%%~nF
    echo 扩展名:%%~xF
    echo 完整路径:%%~dpF
)

这些参数扩展语法是 Windows 批处理编程中非常实用的功能,特别适合处理文件路径和参数解析。