我有一个使用%CD%环境变量的Windows cmd文件来确定cmd文件的执行目录。
当我从命令行运行cmd文件时,它可以正常工作,这意味着%CD%变量包含工作目录。如果我双击左键单击cmd它也可以正常工作。但是,如果我右键单击cmd文件并选择runas administrator,则%CD%变量包含值“C:\ Windows \ system32”而不是cmd正在执行的curent目录。
我能够使用以下脚本重现该问题:
echo %CD%
pause
答案 0 :(得分:11)
尝试使用%~dp0
而不是%cd%
...这应该会为您提供包含批处理(NT shell)脚本的目录。
答案 1 :(得分:3)
您是否将工作/当前目录与批处理文件所在的目录混淆?
如果我有一个只有
的简单批处理文件@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%