Frage

Ich möchte in einem Windows-Umgebungsvariable einen URL-Präfix speichern. Das Et-Zeichen in der Abfragezeichenfolge macht diese lästigen though.

Zum Beispiel: Ich habe einen URL-Präfix von http://example.com?foo=1&bar= und will eine vollständige URL erstellen, indem Sie einen Wert für den bar Parameter bereitstellt. Ich möchte dann diese URL starten Sie den Befehl „Start“ verwendet wird.

Hinzufügen von Anführungszeichen um den Wert für die SET-Operation ist einfach genug:

set myvar="http://example.com?foo=1&bar="

Windows enthält die Anführungszeichen in dem Ist-Wert aber (dank Windows-!):

echo %myvar%
"http://example.com?foo=1&bar=true"

Ich weiß, dass ich Anführungszeichen weg von Batch-Datei Argumenten mithilfe von Tilde Streifen kann:

echo %~1

Allerdings kann ich nicht scheinen, um es zu dem Namen Variablen zu tun:

echo %~myvar%
%~myvar%

Was ist die Syntax um dies zu erreichen?

War es hilfreich?

Lösung

Dies ist keine Einschränkung der Umgebungsvariablen, sondern die Kommando-Shell.

die gesamte Zuordnung in Anführungszeichen ein:

set "myvar=http://example.com?foo=1&bar="

Obwohl, wenn Sie versuchen, dies zu Echo, es wird sich beschweren, wie die Shell eine Pause dort sehen werden.

Sie können es echo durch die var name in Anführungszeichen gesetzt:

echo "%myvar%"

oder besser, nur den Befehl set, um den Inhalt zu lesen:

set myvar

Andere Tipps

echo% myvar: "=%

Das funktioniert

for %a in (%myvar%) do set myvar=%~a

Ich würde auch dieses verwenden, wenn ich eine Variable drucken will, die ohne die Anführungszeichen enthielt und Ampersand.

for %a in ("fish & chips") do echo %~a

Zwar gibt es mehrere gute Antworten bereits, eine andere Art und Weise Anführungszeichen zu entfernen, ist ein einfaches Unterprogramm zu verwenden:

:unquote
  set %1=%~2
  goto :EOF

Hier ist ein vollständiges Anwendungsbeispiel:

@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS

set words="Two words"
call :unquote words %words%
echo %words%

set quoted="Now is the time"
call :unquote unquoted %quoted%
echo %unquoted%

set word=NoQuoteTest
call :unquote word %word%
echo %word%

goto :EOF

:unquote
  set %1=%~2
  goto :EOF

Verwenden Sie verzögerte Erweiterung von Umgebungsvariablen und verwenden var: ~ 1, -1! die Anführungszeichen zu entfernen:

@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!

So entfernen Sie erst am Anfang und Zitate aus einer Variablen endet:

SET myvar=###%myvar%###
SET myvar=%myvar:"###=%
SET myvar=%myvar:###"=%
SET myvar=%myvar:###=%

Dies setzt voraus, Sie keine ### haben „oder“ ### in Ihrem Wert und funktioniert nicht, wenn die Variable NULL ist.

Kredit geht an http://ss64.com/nt/syntax-esc.html für diese Methode.

mehrere Variablen verwenden, um es zu tun:

set myvar="http://example.com?foo=1&bar="

set bar=true

set launch=%testvar:,-1%%bar%"

start iexplore %launch%
@echo off
set "myvar=http://example.com?foo=1&bar="
setlocal EnableDelayedExpansion
echo !myvar!

Das ist, weil die Variable spezielles Shell-Zeichen enthält.

Ich denke, das sollte es tun:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i

Aber Sie brauchen nicht diese,

set myvar="http://example.com?foo=1&bar="
start "" %myvar%

Wird arbeiten, müssen Sie nur einen Titel auf den Startbefehl liefern.

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