Поведение переменной % %CD отличается когда щелчок правой кнопкой и использование, выполненное как администратор

У меня есть командный файл окон, который использует %CD переменную среды % для определения каталога выполнения командного файла.

Когда я выполняю командный файл из командной строки, это работает правильно, означая, что %CD переменная % содержит рабочий каталог. Если я удваиваю щелчок левой кнопкой cmd, он также работает, как я ожидаю. Однако, если я щелкаю правой кнопкой по командному файлу и выбираю администратора рун затем, %CD переменная % содержит значение "C:\Windows\system32" не текущий каталог, где cmd выполняется.

Я смог воспроизвести проблему со следующим сценарием:

echo %CD%
pause
6
задан Joey 13 July 2010 в 16:29
поделиться

2 ответа

Попытка использовать % ~ dp0 вместо % cd% ... в любом случае это должно дать вам каталог, содержащий пакетный сценарий (оболочка NT), из которого был запущен.

12
ответ дан 8 December 2019 в 15:58
поделиться

Вы путаете рабочий / текущий каталог с каталогом, в котором находится ваш пакетный файл?

Если у меня есть простой пакетный файл с

@echo off
echo %cd%

, и он хранится в c: \ foo \ bar \ test.cmd

В cmd я выполняю

cd c:\foo
bar\test

test.cmd напечатает c: \ foo , а не c: \ foo \ bar

Я предполагаю, что UAC использует system32, поскольку можно поднять с помощью другой пользователь, и этот пользователь может не иметь доступа к текущему каталогу.

Если вам нужен каталог, в котором находится ваш командный файл, используйте% ~ dp0, если вы хотите текущий каталог, используйте. или% CD%

3
ответ дан 8 December 2019 в 15:58
поделиться