У меня есть командный файл окон, который использует %CD переменную среды % для определения каталога выполнения командного файла.
Когда я выполняю командный файл из командной строки, это работает правильно, означая, что %CD переменная % содержит рабочий каталог. Если я удваиваю щелчок левой кнопкой cmd, он также работает, как я ожидаю. Однако, если я щелкаю правой кнопкой по командному файлу и выбираю администратора рун затем, %CD переменная % содержит значение "C:\Windows\system32" не текущий каталог, где cmd выполняется.
Я смог воспроизвести проблему со следующим сценарием:
echo %CD%
pause
Попытка использовать % ~ dp0
вместо % cd%
... в любом случае это должно дать вам каталог, содержащий пакетный сценарий (оболочка NT), из которого был запущен.
Вы путаете рабочий / текущий каталог с каталогом, в котором находится ваш пакетный файл?
Если у меня есть простой пакетный файл с
@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%