Windows cmd: escape-Befehle zum Starten von cmd aus der Stapeldatei, wobei Befehle ausgeführt werden, die PATH hinzufügen

999
sdaau

Ich möchte dazu eine cmd-Eingabeaufforderung, die ein Netzwerkverzeichnis einem lokalen Pfad zuordnet und diesen lokalen Pfad dann der (lokalen) PATH-Variablen hinzufügt.

Ich habe dieses .bat-Skript vorbereitet, das wie erwartet läuft:

pushd \\NetworkPath\Users\myname\Downloads chdir SET CurrentDir="%~dp0" SET var=%cd% & SET CDIR=`chdir` for /f "usebackq" %%x in (`chdir`) do set bvar=%%x SET PATH=%PATH%;%bvar% @echo IT IS: %CurrentDir%, %var%, %CDIR%, %bvar% ;;; %PATH% --- %CD% 

Im Grunde ist dies das Skript, das ich beim Start von new cmd.exebeim Ausführen der .batDatei ausführen möchte . Das Problem ist, dass wenn ein Netzwerkpfad "eingehängt" wird (z. B. wenn pushdaufgerufen wird), er immer einen neuen und unterschiedlichen lokalen Laufwerksbuchstaben (X :, Y :, Z: ...) erhält, sodass ich feststellen muss, was dies ist lokales Laufwerkspfad entspricht (zB via chdir), bevor ich es für diese Sitzung zu PATH hinzufügen kann; und außerdem bin ich verwirrt, warum SET PATH=%PATH%;%bvar%das Semikolon ;vor dem angefügten Teil immer verdoppelt wird, wenn die endgültige Verkettung abgeschlossen PATHist echo.

Ich habe gelernt, dass das Prozentzeichen %durch Verdoppeln ( %%) entkommt . dieses kaufmännische Und &ist das Trennzeichen, um mehrere Codezeilen in einer einzigen Zeile zu verketten, die mit Caret- Zeichen nicht verwendet wird ^, aber ich bin immer noch verwirrt, da doppelte Anführungszeichen "entweder in SET-Variablen oder außerhalb von Wörtern wortreich erscheinen echo. Auch forscheint der Befehl immer auszuführen (und ich kann ihn nicht mit Caret umgehen) - auch wenn er Teil einer SET-Variablenanweisung ist.

Letztendlich kann ich dieses Skript nicht in einen Einzeiler konvertieren lassen, daher kann ich es als Argument für start.exeStartbefehle verwenden. Beachten Sie, dass ich nicht zwei Batch-Dateien haben möchte, ich möchte nur eine. Ich möchte dieses Skript zuerst in einer Variablen speichern, damit ich es zum Debuggen wiederholen kann - und so weit bin ich gekommen:

SET TCMD="" pushd \\NetworkPath\Users\myname\Downloads ^& chdir ^& SET CurrentDir="%%~dp0" ^& SET var=^%%cd^%% ^& SET CDIR=^(`chdir`) ^& SET PATH=%%PATH%%;%%CD%% ^& echo %%CurrentDir%%, %%var%%, %%CDIR%%, %%bvar%% ;;; %%PATH%% --- %%CD%% "" echo %TCMD% start cmd.exe /k "%TCMD%" 

Problem - die neue cmd.exe beginnt mit:

'""' is not recognized as an internal or external command, operable program or batch file. 

Verweist dann %CD%auf das vorherige Verzeichnis (eines, aus dem das .bat-Skript gestartet wurde), nicht auf das neue.

Keines davon ruft den neuen Laufwerks- / Pfadnamen ab, wenn es so lief - außer vielleicht for /f "usebackq" %%x in (`chdir`), was ich nicht wirklich erfassen kann (ich kann seine Ausgabe sehen), und es scheint auch nicht allzu konsistent zu sein (manchmal scheint es leer zu sein).

Wie kann ich mein erstes Skript entgehen lassen, sodass es als Einzeiler in der startArgumentation meines zweiten Skripts verwendet werden kann, sodass ich das cmd.exeTerminal wie beabsichtigt starten kann ?

Verweise:

0
Was ist das ziel Sie öffnen ein Fenster, um ein neues zu öffnen. Dies ist Ihr Ziel? Wenn das der Fall ist, erstellen Sie einfach einen Stapel mit dem Startbefehl Paul vor 8 Jahren 0

1 Antwort auf die Frage

1
dbenham

Du denkst schon lange darüber nach. Man sieht den Wald vor lauter Bäumen nicht ;-)

Zunächst wird "%~dp0"der Ort des derzeit ausgeführten Skripts angegeben, nicht das aktuelle Verzeichnis.

Zweitens verwenden Sie bereits %CD%, um das aktuelle Verzeichnis am Ende auszudrucken. Warum verwenden Sie es nicht, wenn Sie Ihren Pfad erweitern!?

@echo off pushd "\\NetworkPath\Users\myname\Downloads" path %path%;"%cd%"