Legen Sie eine Pfadvariable mit Leerzeichen im Pfad in einer Windows-CMD-Datei oder Batch-Datei fest

112

Ich bin neu im Schreiben von Skripten und kann dieses nicht zum Laufen bringen. Ich könnte, wenn ich die Dateien in einen Pfad ohne Leerzeichen verschieben würde, aber ich möchte, dass es mit dem Leerzeichen funktioniert, wenn es könnte.

Ich möchte eine Reihe von Office-Updates in einen Ordner mit einer CMD-Datei extrahieren. Um die Batchdatei auf jedem Computer verwendbar zu machen, habe ich eine Pfadvariable festgelegt, die ich nur an einer Stelle ändern muss, um sie auf einem anderen Computer auszuführen. Das Problem ist, dass der Pfad ein Leerzeichen enthält. Wenn ich den Pfad in der Definition in Anführungszeichen setze, setzt cmd.exe sie um den Pfad, bevor der Dateiname angehängt und gewechselt wird und der Stapel mit "Befehlszeilensyntaxfehler" fehlschlägt. Ohne Anführungszeichen schlägt dies fehl mit: "Wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt."

Zum Testen verwende ich den Hilfeschalter, bis ich ihn zum Laufen bringen kann. Ich kann es mit einem 8.3-Datei- / Ordnernamen tun (z. B. Eigene Dateien als MyDocu ~ 1), aber kann es auch anders gemacht werden?

marcerickson
quelle
Die Anführungszeichen müssen den Pfad mit dem Dateinamen enthalten und die Befehlszeilenparameter müssen folgen. Können Sie weitere Details dazu geben, wie die Befehlszeile erstellt wird? Genau das meinen Sie mit> Wenn ich den Pfad in der Definition in Anführungszeichen setze, setzt cmd.exe sie um den Pfad, bevor der Dateiname angehängt und
gewechselt wird

Antworten:

104

Versuchen Sie so etwas:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2
Aphorie
quelle
Das habe ich mit Replace in Notepad gemacht. Danke dir.
marcerickson
5
Ich bin froh, dass es geholfen hat. Es wäre schön, wenn Sie die Antwort, die Ihnen geholfen hat, positiv bewerten und akzeptieren würden.
Aphorie
74

ich benutze

set "VAR_NAME=<String With Spaces>"

beim Aktualisieren des Pfads:

set "PATH=%UTIL_DIR%;%PATH%"
Koko
quelle
3
Dies sollte die akzeptierte Antwort sein. Aus irgendeinem Grund funktioniert der Aufruf von set aus einem if-Block nicht, wenn der Wert ein Leerzeichen enthält und nicht in Anführungszeichen steht.
Kevin
33

Hier gibt es zwei Möglichkeiten. Zuerst können Sie den Pfad ohne Anführungszeichen speichern und später einfach zitieren:

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

Eine andere Option, die Sie verwenden können, ist eine Unterroutine, die alles zum Aufheben der Anführungszeichen von Zeichenfolgen verwendet (in diesem Fall ist dies jedoch keine sehr gute Idee, da Sie Anführungszeichen hinzufügen, entfernen und ohne Nutzen erneut hinzufügen):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

Das %~1entfernt Anführungszeichen um das Argument. Dies ist praktisch, wenn Ordnernamen in Anführungszeichen gesetzt werden, aber wie bereits erwähnt, ist es in diesem speziellen Fall nicht die beste Idee :-)

Joey
quelle
Ich habe die erste Methode verwendet, nämlich Ersetzen im Editor. Der zweite schien unnötig kompliziert. Danke dir.
marcerickson
2
Ich habe eine Batch-Datei, die Parameter erhält. Verwenden set LALA=%~1war das, was für mich funktioniert hat.
JCH2k
Die 2. Methode funktioniert perfekt, wenn Sie Unterprogramme verwenden
robe007
16

Versuche dies;

  1. Erstellen Sie eine Variable wie unten

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Ersetzen Sie dann den Pfad durch Variable. Stellen Sie sicher, dass Sie Anführungszeichen für Start und Ende hinzufügen

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    
Shiran Jayawardena
quelle
8

Ich setze den Pfad immer in doppelte Anführungszeichen, wenn ich eine .bat-Datei erstelle. (Ich habe gerade die PAUSE hinzugefügt, damit der Bildschirm nicht geschlossen wird.)

Beispielsweise:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE
JoBaxter
quelle
7

Der richtige Weg, dies zu tun, ist wie folgt:

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause
Djangofan
quelle
5

Der einfachste Weg, um dieses Problem zu beheben, besteht darin, den Ordnernamen in Anführungszeichen zu setzen:

(cd\New Folder\...) --> (cd\"New Folder"\...)

Hoffe das hilft.

user5528279
quelle
2

Wenn Sie einen permanenten Pfad speichern müssen (der Pfad wird beim Neustart von cmd nicht geändert)

  1. Führen Sie die Eingabeaufforderung als Administrator aus (Klicken Sie mit der rechten Maustaste auf cmd.exe und wählen Sie Als Administrator ausführen).

  2. In cmd setx path "%path%;your new path" dann eingeben

  3. Überprüfen Sie, ob der Pfad korrekt ist, indem Sie path eingeben und die Eingabetaste drücken

mpmpeiris
quelle
1
Ich denke, die Frage betrifft nicht die PATH- Variable, sondern eine Pfadvariable. Das OP möchte anscheinend einen bestimmten Pfad in einer Variablen speichern und den Wert im gesamten Batch-Skript verwenden.
Andriy M
1

Versuchen Sie auch einfach, doppelte Schrägstriche hinzuzufügen, da dies nur für mich funktioniert

set dir = "C: \\ 1. Einige Ordner \\ Andere Ordner \\ Nur weil"

@echo auf MKDIR% dir%

OMG nach dem Posten haben sie das zweite \ in meinem Beitrag entfernt. Wenn Sie also meinen Kommentar öffnen und drei anzeigen, sollten Sie sie als zwei lesen ......

Erwin
quelle