批处理文件 - 当前工作目录干扰环境变量 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
在我的 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