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