anmelder
Goto Top

Beim Batchaufruf durch UAC.ShellExecute nur kurze Dateinamen beim aktuellen Verzeichnis

Hallo,

meine Batch muß Adminrechte haben und ich benötige den gesamten Pfad in dem die Batch ausgeführt wird.

Die erste Ausgabe des Pfades ist beim ersten Aufruf richtig:1 C:\Langerpfadname

Nach dem Aufruf durch UAC.ShellExecute wird nur ein kurzer Dateiname ausgegeben.
1C:\LANGER~1\
2C:\LANGER~1\

Wodurch wird der Fehler verursacht und wie kann ich ihn ggf. umgehen indem die beim Erstaufruf gespeicherte Variable erhalten bleibt?

Dann habe ich noch eine Verständnisfrage: Das Beispiel stammt glaube ich aus diesem Forum, die Pfade werden mit vier \ angegeben, z.B. "%temp%\\\\müll.vbs". Ich kann in der Funktion aber keinen Unterschied feststellen. Wozu wird das gemacht?

@echo off
cls
SETLOCAL ENABLEDELAYEDEXPANSION


SET Aufrufdateipfad=%~d0%~p0
echo 1!Aufrufdateipfad!
pause

 REM Adminrechte prüfen
 >NUL 2>&1 "%Systemroot%\system32\cacls.exe" "%Systemroot%\system32\config\system"  

IF ERRORLEVEL 1 (
  ECHO SET UAC = CreateObject^("Shell.Application"^) > "%temp%\müll.vbs"  
  SET PARAMS = %*:"=""  
  ECHO UAC.ShellExecute "%~s0", "%params%", "!Aufrufdateipfad!", "runas", 3 >> "%temp%\müll.vbs"  
  "%temp%\müll.vbs"  
  IF EXIST "%temp%\müll.vbs" DEL "%temp%\müll.vbs"  
  ECHO Dieses Programm benötigt Administratorrechte. Fragen Sie bitte Ihren Administrator ob Sie dieses Programm ausführen dürfen.
  EXIT
 )

echo 2!Aufrufdateipfad!
pause

Content-Key: 357709

Url: https://administrator.de/contentid/357709

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: anmelder
anmelder 10.12.2017 um 15:49:05 Uhr
Goto Top
Ich habe den Fehler schon gefunden: %~s0 schreibt den 8.3 Dateinamen in die Datei, richtig ist %~f0