1

У меня есть следующий пакетный файл, который создает сетевой ресурс с использованием cmd в качестве администратора. При запуске из любого каталога на диске c: он открывает 2 окна командной строки и ждет, пока пользователь нажмет клавишу. Однако при запуске с любого другого диска он быстро мигает 2 окнами командной строки, исчезает и не запускает команду. Как я могу заставить его работать с любого диска?

@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"
::--------------------------------------

::ENTER YOUR CODE BELOW:
net share sharename=C:\tada /grant:everyone,FULL

echo ...
echo ...
echo PLEASE CHECK ABOVE IF SHARE WAS SUCCESFUL. YOU MAY NOW CLOSE THE WINDOW(S)
echo ...
echo ...
pause

Обновить:

Запуск его из любого подкаталога в C: работает. Запуск его из G: работает. Запуск из G:\Users\myname\Documents\couple_more_subfolders не работает

1 ответ1

2

Я нашел другой скрипт, который не имеет этой проблемы. Оказывается, первый сбой, если в пути к файлу есть место, где он находится (так что на самом деле он не имеет ничего общего с буквой диска):

@echo off
if _%1_==_payload_  goto :payload

:getadmin
    echo %~nx0: elevating self
    set vbs=%temp%\getadmin.vbs
    echo Set UAC = CreateObject^("Shell.Application"^)                >> "%vbs%"
    echo UAC.ShellExecute "%~s0", "payload %~sdp0 %*", "", "runas", 1 >> "%vbs%"
    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
goto :eof

:payload
    ::echo %~nx0: running payload with parameters:
    ::echo %*
    echo ---------------------------------------------------
    cd /d %2
    shift
    shift
    net share sharename=C:\tada /grant:everyone,FULL
echo ...
echo ...
echo PLEASE CHECK ABOVE IF SHARE WAS SUCCESFUL. YOU MAY NOW CLOSE THE WINDOW(S)
echo ...
echo ...
pause
goto :eof

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .