Frage

In einer Windows-Batch-Datei, wenn Sie wie folgt vor:

  

set myvar="c:\my music & videos"

die Variable myvar mit den Anführungszeichen eingeschlossen gespeichert. Ehrlich gesagt finde ich, dass es sehr dumm. Die Zitate sind nur zu sagen, wo der String beginnt und endet, nicht als Teil des Wertes selbst gespeichert werden.
Wie kann ich das verhindern?

Danke.

War es hilfreich?

Lösung

set "myvar=c:\my music & videos"

Beachten Sie die Anführungszeichen vor myvar starten. Es ist tatsächlich so einfach. Randbemerkung:. Myvar nicht danach hallte werden, wenn es denn in Anführungszeichen ist und wird als Befehlstrenn gelesen werden, aber es wird immer noch als Pfad arbeitet

http://ss64.com/nt/set.html unter „Variablennamen können umfassen Spaces "

Andere Tipps

Das ist der richtige Weg, es zu tun:

set "myvar=c:\my music & videos"

Die Zitate werden nicht in dem Variablenwert enthalten sein.

Es hängt davon ab, wie Sie die Variable verwenden. Wenn Sie nur den Wert der Variablen ohne Anführungszeichen verwenden möchten, können Sie entweder verzögert Expansion und String-Substitution verwenden oder den for Befehl:

@echo OFF
SETLOCAL enabledelayedexpansion

set myvar="C:\my music & videos"

Wie andynormancx Staaten sind die Anführungszeichen erforderlich, da die Zeichenfolge, die die & enthält. Oder man kann es mit dem ^ entkommen, aber ich denke, die Anführungszeichen sind ein wenig sauberer.

Wenn Sie verzögerte Expansion mit String-Substitution verwenden, können Sie den Wert der Variablen erhalten, ohne die Anführungszeichen:

@echo !myvar:"=!
>>> C:\my music & videos

Sie können auch den for Befehl:

for /f "tokens=* delims=" %%P in (%myvar%) do (
    @echo %%P
)
>>> C:\my music & videos

Wenn Sie jedoch die Variable in einem Befehl verwenden möchten, müssen Sie den angegebenen Wert verwenden oder den Wert der Variablen in Anführungszeichen ein:

  1. Mit String-Substitution und verzögerten Expansion Wert der Variablen zu verwenden, ohne Anführungszeichen, aber die Variable in einem Befehl verwenden:

    @echo OFF
    SETLOCAL enabledelayedexpansion
    
    set myvar="C:\my music & videos"
    md %myvar%
    @echo !myvar:"=! created.
    
  2. Mit dem for Befehl ohne Anführungszeichen um den Wert der Variablen zu verwenden, aber Sie werden die Variable mit Anführungszeichen müssen umgeben, wenn es in Befehlen:

    @echo OFF
    set myvar="C:\my music & videos"
    
    for /f "tokens=* delims=" %%P in (%myvar%) do (
        md "%%P"
        @echo %%P created.
    )
    

Lange Rede kurzer Sinn, es gibt wirklich keinen sauberen Weg, um einen Pfad oder Dateinamen zu verwenden, die eingebetteten Leerzeichen enthält und / oder &s in einer Batch-Datei.

Verwenden Sie JScript.

Vor vielen Monden (das heißt ca. 8 Jahre geben oder nehmen) Ich arbeite an einem großen C ++ / VB6-Projekt, und ich verschiedene Bits von Batch-Skript hatte Teile des Build zu tun.

Dann hat jemand wies mich an dem Joel-Test , ich war besonders begeistert von Punkt 2 und über bringt all mein kleines Build-Skripte in einen einzigen Build-Skript festgelegt. . .

, und es brach mir fast das Herz, alle bekommen die kleinen Scripts zusammenarbeiten, auf verschiedenen Maschinen, mit leicht unterschiedlichen Setups, ihr Götter es schrecklich war - besonders Einstellgrößen und Parameterübergabe. Es war wirklich spröde, das Geringste wäre es brechen und 30 Minuten von Tweaking erfordert wieder in Gang zu bringen.

Schließlich - ich kann mich stur sein - geschmissen ich die ganze Menge in und in etwa einem Tag Wieder schrieb alles in JavaScript , es von der Eingabeaufforderung mit CScript.

Ich habe es nicht bereut. Obwohl in diesen Tagen ist es MSBuild und Cruise Control, wenn ich etwas tun muß, sogar leicht mit einer Batch-Skript beteiligt, ich jscript verwenden.

Die Windows-Befehlsinterpreter können Sie die Anführungszeichen um den gesamten Satz Befehl (gültig in jeder Version von Windows NT von NT 4.0 auf Windows 2012 R2)

verwenden,

Ihr Skript sollte nur wie folgt geschrieben werden:

@echo OFF

set "myvar=C:\my music & videos"

Dann können Sie Anführungszeichen um die Variablen je nach Bedarf.

mit der CMD-Eingabeaufforderung arbeiten kann manchmal esoterisch erscheinen, aber das Kommando-Interpreter verhält sich eigentlich ziemlich fest in gehorchend es interne Logik, man muss nur umdenken Dinge.

In der Tat, die set-Befehl benötigen Sie keine Anführungszeichen überhaupt zu benutzen, aber sowohl die Art und Weise Sie Ihre Variablenzuweisung und die Art und Weise das tun, Methode der keine Anführungszeichen verursachen können Sie rund um Ihre variable zusätzliche Leerzeichen haben, die sind schwer zu merken, wenn Ihr Skript debuggen.

z. Sowohl die unten sind technisch gültig, aber Sie können Leerzeichen Hinter, also ist es keine gute Praxis:

set myvar=some text   
set myvar="some text" 

z. Sowohl die unten sind gute Methoden für Variablen in Windows-Befehlsinterpreter Einstellung, aber die doppelten Anführungszeichen Methode überlegen ist:

set "myvar=Some text"
(set myvar=Some value)

Beide lassen keine Interpretation wird die Variable genau die Daten, die Sie suchen.

strong Text jedoch für Ihre Zwecke, nur die zitierte Methode funktioniert wirksam, weil Sie ein reserviertes Zeichen verwenden

So verwenden Sie:

set myvar="c:\my music & videos"

Doch obwohl die Variable korrekt auf diese Zeichenfolge gesetzt ist, wenn Sie den Stachel der Befehlsinterpreter ECHO wird das Und-Zeichen als Schlüsselwort interpretiert auf eine andere Anweisung anzuzeigen folgt.

Also, wenn Sie die Zeichenfolge ein Echo aus der Variablen der CMD-Interpreter muss noch gesagt werden, es ist eine Textzeichenfolge, oder wenn Sie nicht die Anführungszeichen nicht möchten, zeigen Sie eine der folgenden Möglichkeiten zu tun haben:

die Variable mit Zitaten echo:

Echo."%myvar%"

echo die Variable ohne Anführungszeichen:

Echo.%myvar:&=^&%
<nul SET /P="%myvar%"

In den beiden oben genannten Szenarien können Sie die Zeichenfolge ohne Anführungszeichen Echo just fine. Beispiel Ausgabe unter:

C:\Admin>    Echo.%myvar:&=^&%
C:\my music & videos

C:\Admin>    <nul SET /P="%myvar%"
C:\my music & videos
C:\Admin>

Versuchen Sie, das Escape-Zeichen '^' verwenden, z.

set myvar=c:\my music ^& videos

Sie werden Sie vorsichtig sein, wenn Sie myvar erweitern, da die Shell das & als wörtliche nicht behandeln könnte. Wenn die oben nicht funktioniert, versuchen, eine caret in den String eingefügt zu:

set myvar=c:\my music ^^^& videos

Sie muss haben die Anführungszeichen, wenn der Text, den Sie Einstellung bestimmte Zeichen enthält, einschließlich & . Wenn der Text nicht enthalten & dann würden Sie nicht die Anführungszeichen müssen.

Zum Beispiel, wenn der Text nur „c: \ Eigene Musik“ war dann könnten Sie tun:

set myvar = c:\my music

Aber weil Ihr Text hat eine & müssen Sie die Anführungszeichen.

Edit:

oder als Dave in seiner Antwort sagt können Sie das Problem Zeichen mit entkommen ^^^ , aber hüte dich vor diesem Ansatz als & ist nicht das einzige Zeichen, das Sie brauchen fliehen. In der Praxis ist es viel einfacher, mit den Anführungszeichen zu bleiben, anstatt all Problemen Zeichen zu entkommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top