在我的 Windows 笔记本电脑上,我的公司将环境变量 CD 设置为某个目录,我无法更改它。在批处理文件中,我必须使用当前的工作目录,例如
set current_dir=%cd%
现在环境覆盖了当前目录。如果我把线
set cd=
前面的原始变量将被删除。是否有一种安全的方法来获取当前目录,因为批处理文件也可能在其他环境中使用?
在我的 Windows 笔记本电脑上,我的公司将环境变量 CD 设置为某个目录,我无法更改它。在批处理文件中,我必须使用当前的工作目录,例如
set current_dir=%cd%
现在环境覆盖了当前目录。如果我把线
set cd=
前面的原始变量将被删除。是否有一种安全的方法来获取当前目录,因为批处理文件也可能在其他环境中使用?
根据我的评论,对于一般用途,我建议的第一件事是您使用%__CD__%
, (或者如果您不想要尾部的反斜杠,%__CD__:~,-1%
),而不是。
例子:
@Set "CWD=%__CD__:~,-1%"
@Set CWD 2>NUL
@Pause
以下替代方案也可能对您有所帮助,尽管没有在类似损坏的环境中进行测试:
@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
将当前路径分配给变量的基本命令是:
命令行: | FOR /f %p in ('CD') do SET myVar=%p |
---|---|
批处理脚本: | FOR /f %%p in ('CD') do SET myVar=%%p |
但是您可以[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]\autoron
通过在每次打开 MSDOS 实例时插入以下宏来进一步编辑 Windows 注册表:
DOSKEY CHDIR=(IF [$1] == [] ( CD ) ELSE ( PUSHD $* )) & FOR /f %p in ('CD') do @SET cd=%p
因此,覆盖CHDIR
命令以将当前路径设置为%cd%
变量或您想要的任何其他内容。还使用网络目录:D