Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未更新Windows%CD%环境变量_Windows_Batch File - Fatal编程技术网

未更新Windows%CD%环境变量

未更新Windows%CD%环境变量,windows,batch-file,Windows,Batch File,我有一个简单的批处理文件(test.bat): 无论我从哪里运行这个.bat文件(即C:\some\dir\test.bat),我的系统都会告诉我我在C:\。这显然既不是预期的行为,也不是期望的行为,如果我在不同的机器上尝试完全相同的脚本,它的行为将与预期的一样,为我提供.bat文件的当前目录。我已经在谷歌上搜索了好几个小时,没有找到任何与我的问题相关的东西。也许我错过了某个窗户的设置?我不知道,有人有什么想法吗?发现了问题:有一个自动运行注册表项,每当打开shell时,它会将目录更改为C:\。

我有一个简单的批处理文件(test.bat):


无论我从哪里运行这个.bat文件(即C:\some\dir\test.bat),我的系统都会告诉我我在C:\。这显然既不是预期的行为,也不是期望的行为,如果我在不同的机器上尝试完全相同的脚本,它的行为将与预期的一样,为我提供.bat文件的当前目录。我已经在谷歌上搜索了好几个小时,没有找到任何与我的问题相关的东西。也许我错过了某个窗户的设置?我不知道,有人有什么想法吗?

发现了问题:有一个自动运行注册表项,每当打开shell时,它会将目录更改为C:\。facepalm

这是否发生在方括号块中?是否正在更改同一驱动器上的目录?cmd.exe进程的当前目录与脚本目录不同。脚本是
%0
。单百分比变量支持一种特殊的“~”语法来获取附加信息,如[d]rive和[p]ath组件。因此,脚本目录的路径是
%~dp0
。这包括一个尾随的反斜杠。在eryksun注释之后,如果您插入
%~dpnx0
,它将显示完整路径
C:\some\dir\test.bat
。我想你把CD放在某个地方了。尝试使用
set“CD=“
”取消设置CD。或者尝试另一个阴影变量
echo%\uuuuu CD%
\uuuuu CD\uuuuu
变量不能被自定变量隐藏,另请参见问题所述,所需结果是“.bat文件的当前目录”,它不一定是工作目录。至于“从何处启动shell”,通常由Explorer启动,使用一个工作目录,该目录可以通过以下方式设置:(1)一个.LNK快捷方式;(2)如果shell是从Win+R对话框运行的,则为用户的配置文件目录;或者(3)如果shell是通过单击.bat或.cmd文件运行的,则为脚本目录。如果从命令行运行脚本,它应该在当前shell中执行,因此具有相同的工作目录。
echo %CD%
pause