it-swarm.com.de

Windows-Batchdatei-Startverzeichnis bei Ausführung als Administrator

Ich habe eine Batch-Datei, die sich in einem Verzeichnis befindet und von dort aus auch ausgeführt werden muss, da Dateien in diesem Verzeichnis aktualisiert werden.
Dies funktioniert einwandfrei, es sei denn, der Benutzer führt die Batchdatei als Administrator aus (erforderlich unter Vista). Das Startverzeichnis ist dann C:\Windows\System32.

Gibt es eine Möglichkeit, immer noch wissen zu können, aus welchem ​​Verzeichnis die Batchdatei ausgeführt wurde?
Ich möchte nicht, dass der Benutzer das Verzeichnis manuell eingibt.

64
Marc

Versuchen Sie, auf den Batch-Dateipfad wie folgt zuzugreifen:

echo %~dp0

Weitere Informationen finden Sie in folgendem Zitat aus dem Befehl for /?, in dem die Funktionsweise des obigen Befehls beschrieben wird:

 Sie können jetzt die folgende optionale Syntax verwenden: 

 % ~ I ​​- erweitert% I, indem er alle umgebenden Anführungszeichen entfernt (") 
% ~ FI - erweitert% I auf einen vollständig qualifizierten Pfadnamen 
% ~ DI - erweitert% I nur auf einen Laufwerksbuchstaben 
% ~ pI - erweitert% I nur um einen Pfad 
% ~ nI - erweitert% I nur um einen Dateinamen 
% ~ xI - erweitert% I um eine Dateierweiterung 
% ~ sI - erweiterter Pfad enthält short nur Namen 
% ~ aI - erweitert% I auf Dateiattribute der Datei 
% ~ tI - erweitert% I auf Datum/Uhrzeit der Datei 
% ~ zI - erweitert% I auf Dateigröße 
 % ~ $ PATH: I - durchsucht die Verzeichnisse, die in der Umgebungsvariablen PATH 
 Aufgelistet sind, und erweitert% I um den vollständig qualifizierten .__ Namen des zuerst gefundenen Verzeichnisses .
 Wenn der Name der Umgebungsvariable nicht .__ ist. definiert, oder die Datei wird von der 
 Suche nicht gefunden. Dann wird dieser Modifikator auf die 
 leere Zeichenfolge 

 erweitert. Die Modifikatoren können dies tun kombiniert werden, um zusammengesetzte Ergebnisse zu erhalten: 

 % ~ dpI - erweitert% I nur um einen Laufwerkbuchstaben und Pfad 
 % ~ nxI - erweitert% I nur um einen Dateinamen und eine Erweiterung 
 % ~ fsI - erweitert% I zu einem vollständigen Pfadnamen mit nur kurzen Namen 
 % ~ dp $ PATH: I - durchsucht die Verzeichnisse, die in PATH .__ aufgelistet sind. Umgebungsvariable für% I und erweitert sich auf die 
 Laufwerksbuchstabe und Pfad des ersten gefundenen .
 % ~ ftzaI - erweitert% I zu einer DIR-ähnlichen Ausgabezeile 
89
Martin

Besser als cd ist pushd was wird

  • laufwerksbuchstaben ändern, wenn ab D:\...
  • weisen Sie einen Laufwerksbuchstaben zu, wenn Sie sich in einem UNC-Netzwerkpfad befinden

pushd %~dp0 ist also gut.

Wenn Sie dies getan haben, rufen Sie popd auf.

38
Benoit

Dies sollte Ihr Problem lösen, indem Sie das Arbeitsverzeichnis für die Batchdatei auf das aktuelle Verzeichnis zurücksetzen:

Fügen Sie diese beiden Zeilen oben in Ihrem .bat-Skript ein: 

@setlocal enableextensions
@cd /d "%~dp0"

Gefunden bei: http://www.codeproject.com/Tips/119828/Running-a-bat-file-as-administrator-Correcting-cur

25
NMrt

Ich benutze:

cD% 0 ..

am Anfang der Batchdatei, um das Verzeichnis in das Verzeichnis zu ändern, in dem die Batchdatei gestartet wurde.

-Mathew

1
Mathew

Sie können eine CD direkt aus dem Dateinamen heraus hinzufügen, indem Sie das übergeordnete Element hinzufügen (nicht in Windows 8.x getestet, hat jedoch "für immer" gearbeitet, soweit ich mich erinnern kann).

CD %FILENAME%\..

und CD wechselt auch die Laufwerke mit/D, was oben gezeigt ist, aber nicht explizit erwähnt wurde. CD/D% FILENAME%\..

(FOR /?IF /?SET /?CALL /?GOTO /?alles) liefert sehr nützliche Informationen, wenn Sie cmd.exe verwenden .)

0
Malcolm