批处理文件 - 当前工作目录干扰环境变量 CD

Batch file - Current working directory interferes with environment variable CD

在我的 Windows 笔记本电脑上,我公司将环境变量 CD 设置到某个目录,我无法更改它。在批处理文件中,我必须使用当前工作目录,如

set current_dir=%cd%

现在环境覆盖了当前目录。如果我把行

set cd=

前面的原变量会被删除。有没有一种安全的方法来获取当前目录,因为批处理文件也可能在其他环境中使用?

根据我的评论,对于一般用途,我建议的第一件事是使用 %__CD__%(或者如果您不想要结尾的反斜杠,%__CD__:~,-1%), 而不是.

示例:

@Set "CWD=%__CD__:~,-1%"
@Set CWD 2>NUL
@Pause

尽管 none 在类似损坏的环境中进行了测试,但以下备选方案也可能对您有所帮助:

@Set "CWD="
@For %%G In (.) Do @Set "CWD=%%~fG"
@Set CWD 2>NUL
@Pause
@Set "CWD="
@For /F "Delims=" %%G In ('CD') Do @Set "CWD=%%G"
@Set CWD 2>NUL
@Pause
@Set "CWD="
@For /F "EOL=? Delims=" %%G In ('Echo Prompt $P^|%SystemRoot%\System32\cmd.exe /D/E')Do @Set "CWD=%%G"
@Set CWD 2>NUL
@Pause

将当前路径分配给变量的基本命令是这样的:

Command line: FOR /f %p in ('CD') do SET myVar=%p
Batch script: FOR /f %%p in ('CD') do SET myVar=%%p

但您可以更进一步编辑 Windows 注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]\autoron
每次打开 MSDOS 实例时插入以下宏:

DOSKEY CHDIR=(IF [] == [] ( CD ) ELSE ( PUSHD $* )) & FOR /f %p in ('CD') do @SET cd=%p

因此,覆盖 CHDIR 命令以将当前路径设置为 %cd% 变量或您想要的任何其他内容。还使用网络目录 :D