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?


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

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%"

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 :-)


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"
    

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

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

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.


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


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 ......

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.