Q:在Win7/Win10中以管理员身份运行在cmd/bat脚本时,如何获取当前脚本文件所在目录?
当我们在Win7/Win10中使用鼠标右键的“以管理员身份运行”以管理员身份运行cmd/bat脚本时,系统默认进入的目录是C:\Windows\System32目录,因此cmd脚本文件中的相应命令因路径不对提示找不到要执行的程序文件等提示。
netpay_Service.exe -install
netpay_Monitor.exe -install
A:解决办法:使用cd /d %~dp0,先进入cmd/bat脚本所在的目录,再去执行其他命令。
netpay_Service.exe -install
netpay_Monitor.exe -install
这个脚本在xp、2000、2003等系统中都可以正常双击运行。在win7/Win10系统中双击运行时,会以普通用户身份运行,此时所获取的文件路径的确是当前路径,而不是C:\Windows\System32。但是运行到安装netpay_Service.exe -install 的系统服务时,普通用户显然权限是不够的。
于是在InstllSvc_En.cmd右键选择“以管理员身份运行”,此时又会出问题,win7/win10可能出于安全问题考虑,此时获得的目录是C:\Windows\System32,于是提示netpay_Service.exe命令无效或程序文件不存在,执行出错。
此时在脚本开始尝试加入命令cd %cd%,来获取当前路径,实验得知,这行语句在xp等系统中有效,但是在win7/win10中依然无效。得到的目录依然是C:\Windows\System32。百度一下才知道要使用cd /d %~dp0命令来获取脚本所在的目录。在脚本最开始添加cd /d %~dp0即可,如下:
cd /d %~dp0
netpay_Service.exe -install
netpay_Monitor.exe -install
在Windows XP~Windows 10系统上运行此脚本,确认都没有问题。下面对命令中涉及到的参数做一解释。
一、关于cd的/d参数通常我们在xp系统中打开cmd窗口时,会显示
C:\users\Administrator>
如果我们执行“cd e:\xxx”命令,发现目录依然还是在C:\users\Administrator
此时,我们键入e:,不但会切换到d盘,而且会会发现E盘上的当前目录为e:/xxx。
C:\users\Administrator>cd e:\xxxcd %~dp0 就是进入批处理所在目录了