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