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

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

@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:, которые создаются с помощью sub.

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

3 ответа

Решение

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

Справка: Некоторые программы не могут получить доступ к сетевым расположениям, когда включен контроль учетных записей.

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

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

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

pushd %~dp0

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

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

СПАСИБО!!!!

Я уже 3 дня расстроен постоянными сбросами и т. д., пытаясь понять, почему, когда я отображаю Z: в некоторых случаях проводник не видит его и почему мой скрипт, который требует повышения, ДЕЙСТВУЕТ, почему он не запускался команды в if существует z:\blah ... так что еще раз спасибо, что развеяли мое трехдневное разочарование.

Что еще хуже, я разобрался с помощью MS для этого, и они тоже были в тупике.

Другие вопросы по тегам