Пакетный файл работает по-другому, если запущен в режиме администратора

Я пытался создать пакетный файл для преобразования файлов в каталоге. Каталог задается с помощью этого кода:

@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.

Любая идея, как решить эту проблему? Спасибо


person Asheara    schedule 12.05.2016    source источник


Ответы (2)


Обычные процессы и процессы с повышенными правами («запуск от имени администратора») не используют общие сопоставления дисков (по умолчанию) или диски substd. Если вы запускаете процесс в контексте с повышенными правами, вам придется сопоставить диски там или сопоставить их в контексте с повышенными правами (например, запустить cmd.exe от имени администратора), прежде чем пытаться запустить целевой сценарий.

Ссылка: Некоторые программы не могут получить доступ к сетевым ресурсам при включенном UAC

person Todd Hartman    schedule 12.05.2016

Когда вы «Запускаете от имени администратора», текущий каталог — это не то, что вы думаете! Просто добавьте эти строки в начало вашего bat-файла, чтобы доказать это себе:

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

Итак, что вам нужно сделать, это добавить эту строку в ваш bat-файл ДО того, как вы будете ссылаться на какие-либо файлы/папки, которые я обычно помещаю в начало.

pushd %~dp0

Это также будет работать правильно, когда вы запускаете с подключенного сетевого диска.

person RGuggisberg    schedule 12.05.2016
comment
Это правдивая и полезная информация, но я не понимаю, как это относится к вопросу. - person Wes Larson; 12.05.2016