Wie lege ich das Arbeitsverzeichnis einer ausführbaren Datei über die Befehlszeile fest, bevor ich sie ausführe?

35

Wenn ich ein Programm in der Befehlszeile ausführe, dessen Speicherort über die Umgebungsvariable Path aufgelöst wird, wird das Arbeitsverzeichnis des Programms im Allgemeinen auf das Installationsverzeichnis festgelegt.

Ich möchte ein solches Programm von einem Konsolenfenster aus ausführen und dessen Arbeitsverzeichnis auf das aktuelle oder ein anderes explizites Verzeichnis setzen. Ich konnte dies tun, indem ich das Programm vorübergehend in mein Arbeitsverzeichnis kopierte. Gibt es eine andere Möglichkeit, dies in den Umgebungen cmd.exe oder powershell.exe zu erreichen?

Die Windows-Shell-Analogie zu dieser Aufgabe besteht darin, eine Verknüpfung zu erstellen und die Eigenschaft "Start In" entsprechend festzulegen.

Steve Guidi
quelle

Antworten:

40

Um das Arbeitsverzeichnis explizit Start-Processfestzulegen , besteht eine PowerShell-Lösung darin, das Cmdlet mit dem -WorkingDirectoryParameter zu verwenden.

Start-Process -FilePath notepad.exe -WorkingDirectory c:\temp

Unter Verwendung des Alias start, des Positionsparameters und des partiellen Parameternamens könnte dies wie folgt geschrieben werden:

start notepad.exe -wo c:\temp

CMD hat auch einen STARTBefehl. Verwenden Sie dazu den /DParameter, um das Arbeitsverzeichnis anzugeben:

START /D c:\temp notepad.exe
Rynant
quelle
6

Das Folgende wird funktionieren, entsprechende Ersetzungen vornehmen und mit einer .cmdErweiterung speichern .

@echo off 
C:
chdir C:\desired\directory
C:\full\path\of\command.exe

Legen Sie diese Batchdatei in einem Verzeichnis in Ihrem ab, %PATH%und Sie sollten sie von jeder cmd.exeInstanz aus aufrufen können .

LawrenceC
quelle
1
Beachten Sie, dass Funky auftreten kann, wenn sich das Arbeitsverzeichnis und die ausführbare Datei nicht auf derselben Partition / demselben Laufwerk befinden.
MBraedley
2
@LawrenceC, Diese Lösung erfordert jedoch eine temporäre Datei. Es ist besser, wenn dies ohne temporäre Dateien erreicht werden könnte
Pacerier