我一直在尝试创建用于转换目录中文件的批处理文件。该目录通过以下代码提供:
@echo off
rem // setting input directory
:input1
set/p "inputdir=Input directory: "
rem // if input is invalid, prompt again
if not exist "%inputdir%" (
echo Directory does not exist.
echo "%inputdir%"
goto input1
)
效果很好 - 通常。但是,因为我之后考虑过使用环境变量,所以我也尝试以管理员身份运行它。但是 - 问题是,当我正常运行时,它需要目录,脚本继续没有问题。当我在管理员中运行更多时,它将充当“目录不存在”
它适用于C:和D:驱动器上的位置,这个问题出现在O:和P:驱动器上,由subst制作。
知道如何解决这个问题吗? 谢谢
答案 0 :(得分:3)
正常和提升(“以管理员身份运行”)进程不共享驱动器映射(默认情况下)或subst
d驱动器。如果在提升的上下文中运行进程,则在尝试启动目标脚本之前,必须将驱动器映射到那里或在提升的上下文中映射它们(例如,以管理员身份运行cmd.exe)。
参考:Some Programs Cannot Access Network Locations When UAC Is Enabled
答案 1 :(得分:1)
当您以管理员身份运行时#39;当前目录不是你的想法!只需将这些行添加到bat文件的开头即可向自己证明:
@echo off
echo(CD=%CD%
pushd %~dp0
echo(CD=%CD%
pause
所以你需要做的就是在引用我通常把它放在开头附近的任何文件/文件夹之前将这一行添加到你的bat文件中。
pushd %~dp0
从映射的网络驱动器运行时,这也可以正常工作。