“以管理员身份运行”时的 Windows 批处理文件起始目录
Posted
技术标签:
【中文标题】“以管理员身份运行”时的 Windows 批处理文件起始目录【英文标题】:Windows batch file starting directory when 'run as admin' 【发布时间】:2010-10-14 22:25:42 【问题描述】:我有一个批处理文件,它位于一个目录中,也必须从那里运行,因为它会更新此目录中的文件。 这工作得很好,除非用户以管理员身份运行批处理文件(Vista 需要)。那么起始目录是 C:\Windows\System32。 有没有办法仍然能够知道批处理文件是从哪个目录运行的? 我不希望用户手动进入目录。
【问题讨论】:
***.com/q/47234901/340790 指出了这里的一般问题,有很多答案都说要修改命令脚本,而 no 答案解释了如何获得实际的快捷方式正常工作并拥有快捷方式实际显示的初始工作目录。值得注意的是,快捷方式中的这个工作目录问题不仅仅适用于脚本。它也适用于通过rundll32
调用的可执行文件和DLL。例如,在***.com/q/18756671/340790 看到它适用于cmd
。
【参考方案1】:
尝试像这样访问批处理文件路径:
echo %~dp0
有关详细信息,请参阅命令 for /?
中的以下引用,该引用描述了上述命令的工作原理:
【讨论】:
太棒了,我不知道这个。非常感谢 多么晦涩难懂!但正是我需要的。谢谢。 @stucampbell 试试命令'for /?'详细了解其工作原理(向下滚动至第 4 页) Donny V 试试下面的pushd
@Donny V 它确实适用于 Windows 8.1 - 我试过了。请记住,这仅在您在批处理文件中运行时才有效。【参考方案2】:
比cd
更好的是pushd
,它将
D:\...
开始,请更改驱动器号
如果在 UNC 网络路径上,则分配驱动器号
所以pushd %~dp0
很好。
好的做法是在完成后致电popd
。
【讨论】:
适用于多卷系统的出色解决方案,适用于 Windows 7、8、8.1 和 10,+1【参考方案3】:这应该可以通过将批处理文件的工作目录设置回当前目录来解决您的问题:
在 .bat 脚本的顶部包含这两行:
@setlocal enableextensions
@cd /d "%~dp0"
发现于:http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur
【讨论】:
这是完美的。解决了我以管理员身份运行 bat 文件时的“找不到文件”问题。【参考方案4】:要解决此问题,请在 .bat 脚本的顶部包含以下两行:
@setlocal enableextensions
@cd /d "%~dp0"
【讨论】:
【参考方案5】:我用:
cd %0..
在批处理文件的开头将目录更改为启动批处理文件的目录。
-马修
【讨论】:
这不会改变驱动器号。 这其实是最好的解决方案,直接改成cd %0/../
?【参考方案6】:
@setlocal 启用扩展
@cd /d "%~dp0"
【讨论】:
【参考方案7】:您可以通过添加父文件名直接从文件名 CD(未在 Windows 8.x 中测试,但据我所知,“永远”工作)。
CD %FILENAME%\..
CD 也将使用 /D 更改驱动器,如上所示,但未明确提及,因此可能会被遗漏。 CD /D %FILENAME%\..
(对于 /? 如果 /? 放 /? 称呼 /? 去 /? 如果您使用 cmd.exe,所有这些都提供了非常有用的阅读,我会不时重读它们。)
【讨论】:
【参考方案8】:这里有一个可行的解决方案:
http://www.vistax64.com/vista-general/79849-run-administrator-changes-default-directory.html
FOR /F %%I IN ("%0") DO SET BATDIR=%%~dpI
ECHO 批处理文件位于目录 %BATDIR%
【讨论】:
您可以直接使用%~dp0
。此处无需调用for
。以上是关于“以管理员身份运行”时的 Windows 批处理文件起始目录的主要内容,如果未能解决你的问题,请参考以下文章