2010-01-13 4 views
7

Este es un ejemplo simplificado con nombres de variables modificados de lo que quiero hacer. También por simplicidad, estoy mostrando la versión de línea de comandos en lugar de la versión del archivo bat.¿Cómo se suprime la expansión de la variable de entorno dentro de DOS?

Estoy haciendo lo siguiente. salida

> echo %foo% 

%foo% 

Sin embargo, si foo es una variable de entorno válida, que no entiendo deseada (% foo%) debido a la expansión variable de entorno.

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

bar 
%bar% 

Ahora, tengo un truco para hacerlo (ejemplo siguiente) esto, pero me preguntaba si hay una forma más limpia de cualquier salida de un carácter '%' o para suprimir la expansión variable de entorno.

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

%foo% 

Además, si la solución requerida es diferente en un archivo bat (como %% en lugar de% o% al 1% en lugar de% 1), por favor hágamelo saber.

Mi caso de uso real se encuentra en un archivo bat con SETX para establecer las variables de entorno globales que dependen de otra variable de entorno para expandirse dentro de ellas.

+0

¿Puede explicar "que dependa de otra variable de entorno para expandirse dentro de ellos"? ¿Desea alguna expansión anidada pero no otras en la misma cadena analizable? – cdkMoose

+0

@cdkMoose: Quiero establecer un entorno global. var es algo así como 'FOO_SDK_BIN =% FOO_SDK%/BIN' pero no expande'% FOO_SDK% 'con SETX. Luego, si cambio la ruta de la variable FOO_SDK con SETX, todas las variables que dependen de ella también se repatriarán correctamente. Solo se trata de crear una secuencia de comandos para simplificar la configuración de un conjunto de máquinas de desarrollo en las que utilizamos un SDK de terceros que tiene bastantes variables de env como esta que pueden enrutarse en una sola var de env. – Adisak

+0

No estoy familair con SETX, pero parece que estás pensando que no quieres que se expanda con SETX "Quiero establecer una env. Var global para que sea algo así como FOO_SDK_BIN =% FOO_SDK%/BIN pero no expandir % FOO_SDK% con SETX. " Pero luego quiere que se expanda después de haber cambiado el valor detrás de la variable usando SETX. En cualquier declaración, se expandirá o no, pero no ambas. – cdkMoose

Respuesta

6

en un archivo por lotes, echo %% foo %% generará% foo%.

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

c:\01Temp>foo 
%foo% 

c:\01Temp> 
+1

D'Oh! Me expulsaron porque eso no funciona en la línea de comandos si foo está configurado (%% foo %% se expande a% bar% en la línea de comandos). ¿Hay alguna otra manera que el hack (establecer el porcentaje =%) para hacerlo en la línea de comando? – Adisak

1

Dentro de un archivo por lotes, utilice dos %% s, ej .:

set foo=1 
echo %%foo%% 

... ecos "foo%%", no "1". No tengo conocimiento de una forma de desactivarlo en el modo inmediato (por ejemplo, no en un archivo por lotes).

+0

Sí, me tiraron porque no estaba funcionando de la manera que quería en modo inmediato sin importar cuántos% tenía seguidos. – Adisak

Cuestiones relacionadas