Batch文件中CD环境变量被覆盖时如何安全获取当前工作目录
安全获取批处理当前工作目录的方案
核心原理
%cd%本质是cmd提供的动态伪环境变量,一旦系统中存在同名的静态CD环境变量,动态值就会被静态值覆盖。但直接执行无参数的cd命令输出的永远是真实当前工作目录,不受静态环境变量影响,也不会修改原有环境变量配置。
实现代码
以下代码可实现跨环境兼容,全程不会修改原有CD环境变量,在普通环境和预设了静态CD变量的环境都能正常拿到真实工作目录:
@echo off :: 捕获cd命令输出赋值给变量 for /f "delims=" %%i in ('cd') do set "current_dir=%%i" :: 测试输出,可删除 echo 当前工作目录为:%current_dir%
代码说明
for /f用于捕获内部命令的输出结果,这里捕获的是cd命令的真实输出delims=参数避免路径中存在空格、特殊符号时被截断
额外补充
如果你需要获取的是当前批处理文件自身所在的目录而非执行批处理时的工作目录,可以直接使用内置变量%~dp0,该变量完全不受静态CD环境变量影响:
set "batch_dir=%~dp0"
内容的提问来源于stack exchange,提问作者Raphael M.
相关产品推荐
相关产品推荐

