2016-06-22 16 views
1

Ich habe ein Batch-Skript, die Zugriff auf eine Variable namens etwa env:dev haben sollte, so dass es einen Doppelpunkt hat ... diese Variable wird von einer Drittanbieter-Komponente festgelegt, also nicht Einfluss auf diese Benennung haben ...Doppelpunkt in Charge Variablenname

Wie kann ich auf den Inhalt dieser Variablen in meinem Batch-Skript zugreifen? Ich weiß, dass : ein Sonderzeichen ist, also kann ich es vielleicht entkommen? Folgendes funktioniert nicht:

echo %env:dev% 
echo "%env:dev%" 
echo %env^:dev% 
... 

Irgendwelche Vorschläge?

Antwort

5

A : Kolon hat eine besondere Bedeutung in CMD Umgebungsvariablen Wenn die Befehlserweiterungen aktiviert sind (Windows cmd Standard), zum Beispiel

Schwer zu escape ein : Kolon in Variablennamen, wenn möglich bei allen. Hier ist ein Workaround: Erstellen Sie Variablen mit solchen Namen, dass : Doppelpunkt durch ein anderes Zeichen, z. _niedriger Linie (Unterstrich):

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 
rem create sample variables 
set "env:dev1=some thing!"  value contains exclamation mark 
set "env:dev2=some thing%%" value contains percent sign 
set "an:other=some:thing3"  another name containing colon 

echo --- before --- 
set env 
set an 

for /F "tokens=1* delims==" %%G in ('set') do (
    set "auxName=%%G" 
    set "auxValue=%%H" 
    call :colons 
) 

echo --- after --- 
set env 
set an 

rem 
ENDLOCAL 
goto :eof 

:colons 
    if not "%auxName::=_%" == "%auxName%" set "%auxName::=_%=%auxValue%" 
goto :eof 

Ausgang:

==> d:\bat\so\37973141.bat 
--- before --- 
env:dev1=some thing! 
env:dev2=some thing% 
an:other=some:thing3 
--- after --- 
env:dev1=some thing! 
env:dev2=some thing% 
env_dev1=some thing! 
env_dev2=some thing% 
an:other=some:thing3 
an_other=some:thing3 

==> 

bearbeiten: aus Gründen der Vollständigkeit halber:

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 
rem create sample variables 
set "env:dev1=some thing!"  value contains exclamation mark 
set "env:dev2=some thing%%" value contains percent sign 
set "an:other=some:thing3"  another name containing colon 

rem use sample variables 
SETLOCAL DisableExtensions 
echo Disabled Extensions %env:dev1%/%env:dev2%/%an:other% 
ENDLOCAL 

Beachten Sie Befehlserweiterungen des Sperrens Auswirkungen, lesen Sie cmd /?:

Die Befehlserweiterungen Änderungen und/oder Ergänzungen zu den folgenden Befehlen beinhalten:

DEL or ERASE 
COLOR 
CD or CHDIR 
MD or MKDIR 
PROMPT 
PUSHD 
POPD 
SET 
SETLOCAL 
ENDLOCAL 
IF 
FOR 
CALL 
SHIFT 
GOTO 
START (also includes changes to external command invocation) 
ASSOC 
FTYPE 

spezifische Details zu erhalten, geben Sie befehl /? um die Besonderheiten zu sehen.

+0

Vielen Dank! Oh Mann, wie kann man ':' in einen variablen Namen ... was für ein Chaos. – Matthias

+0

blutige Fenster - zu hart, um Batch-Skripte zu programmieren – Starfish