Startverzeichnis der Windows-Batchdatei bei 'Als Administrator ausführen'

79

Ich habe eine Batch-Datei, die sich in einem Verzeichnis befindet und auch von dort ausgeführt werden muss, da sie Dateien in diesem Verzeichnis aktualisiert.
Dies funktioniert einwandfrei, außer wenn der Benutzer die Batchdatei als Administrator ausführt (unter Vista erforderlich). Das Startverzeichnis lautet dann C: \ Windows \ System32.

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

Marc
quelle

Antworten:

112

Versuchen Sie, wie folgt auf den Pfad der Batchdateien zuzugreifen:

echo %~dp0

Weitere Informationen finden Sie im folgenden 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 und entfernt alle umgebenden Anführungszeichen (")
    % ~ fI - erweitert% I zu einem vollständig qualifizierten Pfadnamen
    % ~ dI - erweitert% I nur zu einem Laufwerksbuchstaben
    % ~ pI - erweitert% I nur zu einem Pfad
    % ~ nI - erweitert% I nur auf einen Dateinamen
    % ~ xI - erweitert% I nur um eine Dateierweiterung
    % ~ sI - Der erweiterte Pfad enthält nur Kurznamen
    % ~ aI - erweitert% I auf Dateiattribute der Datei
    % ~ tI - erweitert% I auf Datum / Uhrzeit der Datei
    % ~ zI - erweitert% I auf die Dateigröße
    % ~ $ PATH: I - durchsucht die im PATH aufgelisteten Verzeichnisse
                   Umgebungsvariable und erweitert% I auf die
                   voll qualifizierter Name des ersten gefundenen.
                   Wenn der Name der Umgebungsvariablen nicht lautet
                   definiert oder die Datei wird von der nicht gefunden
                   Suche, dann erweitert sich dieser Modifikator auf die
                   leerer String

Die Modifikatoren können kombiniert werden, um zusammengesetzte Ergebnisse zu erhalten:

    % ~ dpI - erweitert% I nur auf einen Laufwerksbuchstaben und einen Pfad
    % ~ nxI - erweitert% I nur auf einen Dateinamen und eine Erweiterung
    % ~ fsI - erweitert% I zu einem vollständigen Pfadnamen mit nur kurzen Namen
    % ~ dp $ PATH: I - durchsucht die im PATH aufgelisteten Verzeichnisse
                   Umgebungsvariable für% I und erweitert sich auf die
                   Laufwerksbuchstabe und Pfad des ersten gefunden.
    % ~ ftzaI - erweitert% I zu einer DIR-ähnlichen Ausgangsleitung
Martin
quelle
Fantastisch, ich kannte diesen nicht. Vielen Dank
Marc
Wie dunkel! Aber genau das, was ich brauchte. Vielen Dank.
Stucampbell
1
@stucampbell versuchen Sie den Befehl 'für /?' um eine detaillierte Beschreibung zu erhalten, wie dies funktioniert (scrollen Sie nach unten zu Seite 4)
Martin
Donny V versuchen pushdunten
nwgat
@Donny V es funktioniert unter Windows 8.1 - ich habe es versucht. Beachten Sie, dass dies nur funktioniert, wenn Sie es in einer Batchdatei ausführen.
Martin
51

Besser als cdheißen pushddie

  • Ändern Sie den Laufwerksbuchstaben, wenn Sie mit beginnen D:\...
  • Weisen Sie einen Laufwerksbuchstaben zu, wenn Sie sich in einem UNC-Netzwerkpfad befinden

Ist pushd %~dp0also gut.

Es empfiehlt sich dann, nach Abschluss anzurufen popd.

Benoit
quelle
Große Lösung für Systeme mit mehreren Volumes und Arbeiten in Windows 7, 8, 8.1 und 10, 1
Bit Fracture
30

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 Ihr .bat-Skript ein:

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

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

NMrt
quelle
1
Dies ist perfekt. Das Problem "Datei nicht gefunden" beim Ausführen der Bat-Datei als Administrator wurde behoben.
PNDA
1

Ich benutze:

cd% 0 ..

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

-Mathew

Mathew
quelle
1
Das wird den Laufwerksbuchstaben nicht ändern.
Jorge Fuentes González
Dies ist eigentlich die beste Lösung, ändern Sie sie cd %0/../einfach in 👍
St3ve R0nix
0

Sie können direkt vom Dateinamen CD hinzufügen, indem Sie das übergeordnete Element hinzufügen (nicht in Windows 8.x getestet, hat aber, soweit ich mich erinnern kann, "für immer" funktioniert).

CD %FILENAME%\..

und CD wechselt auch die Laufwerke mit / D, was oben gezeigt, aber nicht explizit erwähnt wird und daher möglicherweise übersehen wird. CD / D% FILENAME% \ ..

(FOR /? IF /? SET /? CALL /? GOTO /? Alle bieten sehr nützliche Informationen, wenn Sie cmd.exe verwenden. Ich lese sie gelegentlich erneut.)

Malcolm
quelle
0

@setlocal enableextensions

@cd / d "% ~ dp0"

Syed Abdul Haseeb
quelle
3
Syed Abdul Haseeb, ich bezweifle, dass dies hilft oder überhaupt funktioniert. Um mich davon zu überzeugen, fügen Sie bitte eine Erklärung hinzu, wie dies funktioniert und warum es hilft. Dies würde helfen, den Missverständnis zu bekämpfen, dass StackOverflow eine kostenlose Programmierserie bietet.
Yunnosch
0

Fügen Sie diese beiden Zeilen oben in Ihr .bat-Skript ein, um dieses Problem zu beheben:

@setlocal enableextensions
@cd /d "%~dp0"
Majid Azarniush
quelle