gpt4 book ai didi

batch-file - CD环境变量什么时候更新?

转载 作者:行者123 更新时间:2023-12-03 22:54:16 29 4
gpt4 key购买 nike

使用 CD 的提示从批处理脚本中获取当前工作目录的环境变量通常被发布。但是CDcall 时不会更新另一个批处理文件。然后是cd命令回显另一个批处理文件的新路径,但 %CD% (或 !CD! )未更新。例子:

@echo off
cd %~dp0
echo in %0: CD=%CD%
pause
call X:\testcall.cmd

将此另存为 C:\testcall.cmdX:\testcall.cmd ,然后运行 ​​ C:\testcall.cmd .您应该看到 CD 的值没有改变。这似乎不依赖于 call ;以下均无效:
start /D <NEW_DIR> <OTHER_CMD_FILE>
start cmd /c <NEW_DIR>\<OTHER_CMD_FILE>
cmd /c <NEW_DIR>\<OTHER_CMD_FILE>
<NEW_DIR>\<OTHER_CMD_FILE>
cd %~dp0
pushd %~dp0
CD将保留它的旧值,而 cd (命令)显示正确的目录。因此我设置了 CD在脚本的开头:
set CD=%~dp0

...同时假设 cmd.exe 设置 CD仅当此变量尚未设置时。真的?

最佳答案

%CD%是当前目录,而 %~dp0是当前正在运行的脚本的目录(尾随 '\')。

另外,不要设置环境。 var 调用 CD ,因为它将覆盖默认的 %CD% 伪变量,并且会令人难以置信的困惑 - 参见 OldNewThing - ERRORLEVEL is not %ERRORLEVEL% .

例如,当运行 c:\temp\a.cmd 时,它是:

@echo off
echo Currently running script: %~dpnx0
cd %~dp0
echo scriptDir=%~dp0, CD=%CD%
cd %~dp0a
echo scriptDir=%~dp0, CD=%CD%
set CD=bogus value
echo scriptDir=%~dp0, CD=%CD%

输出:
Currently running script: c:\temp\a.cmd
scriptDir=c:\temp\, CD=c:\temp
scriptDir=c:\temp\, CD=c:\temp\a
scriptDir=c:\temp\, CD=bogus value

关于batch-file - CD环境变量什么时候更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16278026/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com