Windows %右键单击并使用“以管理员身份运行”时,CD%变量的行为不同

Windows %右键单击并使用“以管理员身份运行”时,CD%变量的行为不同,windows,batch-file,cmd,Windows,Batch File,Cmd,我有一个windows cmd文件,它使用%CD%环境变量来确定cmd文件的执行目录 当我从命令行运行cmd文件时,它工作正常,这意味着%CD%变量包含工作目录。如果我双击cmd,它也会像我预期的那样工作。但是,如果右键单击cmd文件并选择runas administrator,则%CD%变量包含值“C:\Windows\system32”,而不是当前执行cmd的目录 我能够用以下脚本重现问题: echo %CD% pause 正在尝试使用%~dp0而不是%cd%。。。在任何情况下,这都应该为

我有一个windows cmd文件,它使用%CD%环境变量来确定cmd文件的执行目录

当我从命令行运行cmd文件时,它工作正常,这意味着%CD%变量包含工作目录。如果我双击cmd,它也会像我预期的那样工作。但是,如果右键单击cmd文件并选择runas administrator,则%CD%变量包含值“C:\Windows\system32”,而不是当前执行cmd的目录

我能够用以下脚本重现问题:

echo %CD%
pause

正在尝试使用
%~dp0
而不是
%cd%
。。。在任何情况下,这都应该为您提供包含启动批处理(NT shell)脚本的目录。

是否将工作/当前目录与批处理文件所在的目录混淆

如果我有一个简单的批处理文件

@echo off
echo %cd%
这存储在c:\foo\bar\test.cmd中

在cmd中,我执行

cd c:\foo
bar\test
test.cmd将打印
c:\foo
而不是
c:\foo\bar

我假设UAC使用system32,因为可以使用不同的用户升级,并且该用户可能无法访问当前目录


如果需要批处理文件所在的目录,请使用%dp0;如果需要当前目录,请使用。或者说%CD%

与UAC没有多大关系,我想。Explorer的工作目录可能就是这样。