2010-01-13 2 views
7

Dies ist ein vereinfachtes Beispiel mit geänderten Variablennamen, was ich tun möchte. Auch der Einfachheit halber zeige ich die Befehlszeilenversion anstelle der Bat-Dateiversion.Wie unterdrücken Sie die Erweiterung der Umgebungsvariablen in DOS?

Ich mache folgendes.

> echo %foo% 

%foo% 

Wenn jedoch foo eine gültige Umgebungsvariable ist, ich weiß nicht wegen Erweiterung von Umgebungsvariablen gewünschten Ausgang (% foo%) erhalten.

> set foo=bar 
> echo %foo% 
> echo %%foo%% 

bar 
%bar% 

Jetzt habe ich einen Hack (folgendes Beispiel), dies zu tun, aber ich habe mich gefragt, ob es eine sauberere Weg ist, um entweder Ausgang ein Zeichen% oder Erweiterung von Umgebungsvariablen zu unterdrücken.

> set foo=bar 
> set percent=% 
> echo %percent%foo%percent% 

%foo% 

Auch wenn die erforderliche Lösung in einer Bat-Datei unterscheidet (wie %% anstatt% oder% 1% anstatt% 1) lassen Sie es mich wissen.

Mein tatsächlicher Anwendungsfall ist in einer Fledermausdatei mit SETX, um globale Umgebungsvariablen zu setzen, die darauf angewiesen sind, dass eine andere Umgebungsvariable in ihnen expandiert.

+0

Können Sie erklären, "die sich darauf verlassen, dass eine andere Umgebungsvariable in ihnen erweitert wird". Möchten Sie eine verschachtelte Erweiterung, aber keine anderen in derselben analysierbaren Zeichenfolge? – cdkMoose

+0

@cdkMoose: Ich möchte ein globales env festlegen. var ist etwas wie 'FOO_SDK_BIN =% FOO_SDK%/BIN', aber nicht '% FOO_SDK%' mit SETX. Wenn ich dann den FOO_SDK-Variablenpfad mit SETX ändere, werden alle Variablen, die darauf angewiesen sind, ebenfalls korrekt zurückgemeldet. Es dient lediglich dazu, ein Skript zu erstellen, um die Einrichtung einer Reihe von Entwicklungsmaschinen zu vereinfachen, in denen wir ein SDK von Drittanbietern verwenden, das eine ganze Reihe von env-Variablen wie diese hat, die alle in einer einzelnen env var verwurzelt sein können. – Adisak

+0

Ich bin nicht vertraut mit SETX, aber es klingt wie Sie sying Sie nicht wollen, dass es mit SETX erweitern "Ich möchte eine globale env. Var so etwas wie FOO_SDK_BIN =% FOO_SDK%/BIN, aber nicht erweitern % FOO_SDK% mit SETX. " Aber später möchten Sie es später erweitern, nachdem Sie den Wert hinter der Variablen mit SETX geändert haben. In irgendeiner Aussage wird es entweder expandieren oder nicht, aber nicht beides. – cdkMoose

Antwort

6

In einer Batch-Datei erzeugt echo %% foo %%% foo%.

c:\01Temp>type foo.bat 
@echo %%foo%% 

c:\01Temp>foo 
%foo% 

c:\01Temp> 
+1

D'Oh! Ich wurde abgeworfen, weil das auf der Kommandozeile nicht funktioniert, wenn foo gesetzt ist (%% foo %% expandiert zu% bar% auf der Kommandozeile). Gibt es einen anderen Weg als den Hack (set percent =%), um es in der Befehlszeile zu tun? – Adisak

1

Innerhalb einer Batch-Datei, verwenden Sie zwei %% s, z.B .:

set foo=1 
echo %%foo%% 

... Echos "% foo%", nicht "1". Ich bin mir nicht bewusst, dass es im Sofort-Modus deaktiviert werden kann (z. B. nicht in einer Batch-Datei).

+0

Ja, ich wurde abgeworfen, weil es im sofortigen Modus nicht so funktionierte wie ich es wollte, egal wie viele% ich hintereinander hatte. – Adisak

Verwandte Themen