Позвольте мне объяснить, что я имел в виду.
Я запускаю cmder.exe (через init.bat
) в окне консоли cmd.exe. Смотрите прикрепленный GIF. Для этого я написал небольшой пакетный скрипт cmr.bat
показанный ниже. Он работает так, как и хотел.
@echo off
%comspec% /k "C:\cmder\vendor\init.bat %*"
EXIT /B %ERRORLEVEL%
Но этот подход не дает возможности напрямую запускать init.bat
в повышенном режиме .
Вдохновленный данным решением, я создал еще один командный файл amr.bat
, чтобы запустить внутренний init.bat
в повышенном режиме.
Вот содержание amr.bat
:: Automatically check & get admin rights V2
@echo off
:: BatchGotAdmin
::-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
set params = %*:"="
echo UAC.ShellExecute "cmd.exe", "/c %~s0 %params%", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
del "%temp%\getadmin.vbs"
exit /B
:gotAdmin
pushd "%CD%"
CD /D "%~dp0"
::::::::::::::::::::::::::::::
:: START OF USER CUSTOM CODE
::::::::::::::::::::::::::::::
%comspec% /k "C:\cmder\vendor\init.bat %*" rem THIS IS MY CODE
EXIT /B %ERRORLEVEL%
amr.bat
запускает init.bat
в режиме с повышенными правами , но не сохраняет (сохраняет) рабочий каталог, из которого он был вызван. Приведенный ниже скриншот GIF демонстрирует это поведение.
init.bat
не получил рабочий каталог, из которого он был вызван. Вместо этого init.bat
был запущен с рабочим каталогом, установленным по amr.bat
(который находится в каталоге C:\BatScripts
).
Итак, мой вопрос, как я могу изменить скрипт amr.bat
, чтобы сохранить (сохранить) текущий каталог, из которого он был вызван?
Есть идеи?