arquivo em lote só é executado corretamente a partir da unidade C:

1

Eu tenho o seguinte arquivo em lotes que cria um compartilhamento de rede usando cmd como admin. Quando executado a partir de qualquer diretório na unidade c: ele abre 2 janelas de prompt de comando e aguarda o usuário pressionar uma tecla. Quando executado a partir de qualquer outra unidade, no entanto, ele pisca rapidamente duas janelas de prompt de comando, desaparece e não executa o comando. Como posso fazer funcionar a partir de qualquer unidade?

@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

Atualização:

Executando-o de qualquer subdiretório em C: works. Executá-lo de G: funciona. A execução de G:\Users\myname\Documents\couple_more_subfolders não funciona

    
por Blaine 26.03.2017 / 04:21

1 resposta

2

Eu encontrei outro script que não tem esse problema. Acontece que o primeiro falha se houver um espaço no caminho do arquivo onde ele está localizado (então, realmente, não tinha nada a ver com a letra da unidade):

@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
    
por 26.03.2017 / 04:55