Batch-Ausgabe auf CD-Befehl umleiten

Sep 15 2020

Ich habe eine Batch-Datei, die einen Pfad ausgibt. Wie kann ich die Batchdatei in Windows cmd verwenden, um das aktuelle Verzeichnis zu ändern?

Was habe ich versucht:

F:\>cd my-path.bat
The system cannot find the path specified.

F:\>cd (my-path.bat)
The system cannot find the path specified.

F:\>my-path.bat | cd
F:\
The process tried to write to a nonexistent pipe.

my-path.bat Inhalt:

@ECHO OFF

@ECHO F:\MyPath\

Antworten

4 Konrad Sep 15 2020 at 20:14
for /f "delims=" %d in ('my-path.bat') do cd /d "%~d"

Hinweis: In einer Batchdatei müssen Sie% durch %% ersetzen

3 ItWasn'tMe Sep 15 2020 at 21:16

Für verschiedene Treiber benötigen Sie /din Ihrem cdBefehl

Wenn Ihr Ordner / Pfad / Name Leerzeichen / Sonderzeichen enthält, verwenden Sie auch doppelte Anführungszeichen

@echo off 

echo\"F:\path to your folder"

:: or add/replace echo\"F:\path to your folder" to cd /d :: 
cd /d "F:\path\to\folder"

Eine Alternative wäre, die Ausgabe in einer Schleife zu erhalten, in der der Schläger nicht geändert wird, nur die Befehlszeile ...

for /f tokens^=* %i in ('^<con: "my-path.bat"')do cd/d "%~i"
  • Denken Sie daran, dass Schleifenvariablen %iin bat %%i:
for /f tokens^=* %%i in ('^<con: "my-path.bat"')do cd/d "%%~i"

  • Sie können Argumente ( %*) verwenden, um Ihren Befehl variabel auszuführen:
@echo off 

<con: call %* "F:\path to your folder" 2>nul || echo\"F:\path to your folder"

Die 2>nulUnterdrückung eines möglichen Fehlers, und wenn der letzte Befehl nicht 0 zurückgibt, wird ein einfaches Echo ausgeführt ...

Verwenden Sie Argumente in Ihrem Schläger:

my-path.bat cd /d

  • Einige weiterführende Literatur:

    [√] 'Cd / d'

    [√] 'Für'

    [√] 'Für / F'

    [√] Weiterleitungen in der Fledermausdatei

    [√] Bedingte Ausführung ||und&&

    [√] Wie kann ich Argumente an eine Batchdatei übergeben?

    [√] Start, '2> nul', 'cmd' und andere Symbole in einer Batchdatei verstehen

2 LeRouteur Sep 15 2020 at 19:59

Warum ändern Sie nicht einfach Ihre Batch-Datei in:

@echo off

cd F:\MyPath\
1 TripeHound Sep 16 2020 at 17:48

Aufbauend auf der Antwort von LeRouteur könnte Folgendes ein nützlicher Kompromiss sein:

@echo off
if "%~1" == "." cd /d F:\mypath && goto :eof
echo F:\mypath

Wenn Sie nur my-pathausführen, wird der Pfad wie derzeit wiedergegeben, aber wenn Sie ausgeführt werden my-path .(dh mit einem einzelnen Punkt als Parameter), wird dieser Pfad geändert.

Wenn Sie es nicht mögen, den Pfad zweimal einzugeben, kann dies durch die Verwendung einer Umgebungsvariablen vermieden werden. Um dies jedoch "sauber" (ohne die vorhandene Umgebung zu verschmutzen) zu tun, müssen Sie ein wenig darüber nachdenken:

@echo off
setlocal
set "MYPATH=F:\mypath"
if "%~1" == "." (
    endlocal && cd /d "%MYPATH%"
    goto :eof
)
echo "%MYPATH%"

Die Verwendung von setlocalbedeutet, dass Änderungen an der Umgebung (z. B. MYPATH) nur lokal vorgenommen werden: endlocalWenn Sie das Ende der Batch-Datei ausführen oder erreichen, wird die ursprüngliche Umgebung wiederhergestellt (siehe setlocal /?und endlocal /?).

Die Verwendung setlocalist in Batch-Dateien sehr verbreitet, damit Umgebungsvariablen, die sie verwenden / ändern, die Hauptumgebung nicht "verschmutzen". Das Problem ist, dass das aktuelle Verzeichnis Teil der Lokalisierung ist: Wenn Sie ausgeführt werden, cdwährend setlocales in Kraft ist, kehren Sie beim Beenden des Skripts zu Ihrem Startverzeichnis zurück.

Eine Lösung besteht darin, die Befehle endlocalund cdin dieselbe Zeile zu setzen. Die Art und Weise, wie Batch-Dateien analysiert werden, bedeutet, dass die Auswertung von MYPATHerfolgt, während die Umgebung noch "lokal" ist (also immer noch den richtigen Wert hat), die Ausführung des cdBefehls (unter Verwendung des Werts, der im ersten Durchgang erhalten wurde) jedoch nicht ‚t passieren , bis nach endlocalhat ausgeführt, was bedeutet , das Verzeichnis wird geändert werden , wenn es um die Befehlszeile zurückgibt.

Die Art MYPATHund Weise, wie ich seinen Wert definiere und verwende (in doppelte Anführungszeichen eingeschlossen), ermöglicht, dass der Pfad Leerzeichen enthält. Vielleicht hier nicht notwendig, aber eine gute Angewohnheit beim Schreiben von Batch-Dateien.

Als letzte Option könnte, Sie ersetzen cd /dmit pushd. Letzterer "schiebt" das aktuelle Verzeichnis auf einen Stapel, bevor er zum neuen wechselt (siehe pushd /?). Wenn Sie mit dem, was Sie tun müssen, fertig sind, MYPATHkönnen Sie es ausführen popd, um zu dem Verzeichnis zurückzukehren, aus dem Sie ursprünglich ausgeführt haben my-path ..