如果在管理员模式下运行,批处理文件的工作方式会有所不同

问题描述 投票:0回答:3

我一直在尝试创建批处理文件来转换目录中的文件。该目录是通过以下代码给出的:

@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: 驱动器上的位置正常工作,此问题出现在由 subst 制作的 O: 和 P: 驱动器上。

知道如何解决这个问题吗? 谢谢你

windows batch-file administrator
3个回答
3
投票

正常和提升(“以管理员身份运行”)进程不共享驱动器映射(默认情况下)或

subst
d 驱动器。如果您在提升的上下文中运行进程,则在尝试启动目标脚本之前,您必须将驱动器映射到那里或在提升的上下文中映射它们(例如,以管理员身份运行 cmd.exe)。

参考:启用UAC后某些程序无法访问网络位置


1
投票

当您“以管理员身份运行”时,当前目录不是您想象的那样!只需将这些行添加到 bat 文件的开头即可向自己证明:

@echo off
echo(CD=%CD%
pushd %~dp0
echo(CD=%CD%
pause

因此,您需要做的就是在引用任何文件/文件夹之前将此行添加到您的bat文件中,我通常将其放在开头附近。

pushd %~dp0

当您从映射的网络驱动器运行时,这也可以正常工作。


0
投票

“普通和提升(“以管理员身份运行”)进程不共享驱动器映射(默认情况下)或 substd 驱动器。如果在提升的上下文中运行进程,则必须在那里映射驱动器或将它们映射到在尝试启动目标脚本之前提升上下文(例如,以管理员身份运行 cmd.exe)。”

谢谢你!!!!

我已经沮丧了 3 天,不断重置等,试图找出为什么当我映射 Z 时:在某些情况下资源管理器看不到它,以及为什么我需要提升的脚本一直在运行,为什么它没有运行如果存在 z: lah 中的任何命令...再次感谢您打破了我 3 天的挫败感。

更糟糕的是,我为此向 MS 寻求帮助,他们也被难住了。

© www.soinside.com 2019 - 2024. All rights reserved.