2010-01-13 3 views
7

Ceci est un exemple simplifié avec des noms de variables modifiés de ce que je veux faire. Aussi par souci de simplicité, je montre la version de la ligne de commande plutôt que la version du fichier bat.Comment supprimer l'expansion de variables d'environnement dans DOS?

Je suis en train de faire ce qui suit.

> echo %foo% 

%foo% 

Cependant, si foo est une variable d'environnement valide, je ne me sortie désiré pas (% de% foo) en raison de l'expansion variable d'environnement.

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

bar 
%bar% 

Maintenant, j'ai un hack pour faire (exemple suivant), mais je me demandais s'il y a une façon plus propre soit pour émettre un caractère « % » ou de supprimer l'expansion variable d'environnement.

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

%foo% 

En outre, si la solution requise est différente dans un fichier de chauve-souris (comme %% plutôt que% ou% 1% plutôt que% 1) s'il vous plaît laissez-moi savoir. Mon cas d'utilisation réel est dans un fichier bat avec SETX pour définir les variables d'environnement globales qui reposent sur une autre variable d'environnement à développer en leur sein.

+0

Pouvez-vous expliquer "cela dépend d'une autre variable d'environnement à développer en leur sein." Voulez-vous une extension imbriquée mais pas d'autres dans la même chaîne analysable? – cdkMoose

+0

@cdkMoose: Je veux définir un environnement global. var est quelque chose comme 'FOO_SDK_BIN =% FOO_SDK%/BIN' mais ne développe pas% FOO_SDK%' avec SETX. Ensuite, si je change le chemin de la variable FOO_SDK avec SETX, toutes les variables qui en dépendent seront également correctement repatées. C'est juste pour faire un script pour simplifier la configuration d'un tas de machines de développement où nous utilisons un SDK tiers qui a quelques variables d'environnement comme ceci qui peuvent toutes être enracinées dans une seule var env. – Adisak

+0

Je ne suis pas familier avec SETX, mais on dirait que vous voulez que vous ne développiez pas avec SETX "Je veux définir un environnement global var.avec quelque chose comme FOO_SDK_BIN =% FOO_SDK%/BIN mais pas développer % FOO_SDK% avec SETX. " Mais plus tard, vous voulez qu'il se développe après avoir changé la valeur derrière la variable en utilisant SETX. Dans une déclaration, il va ou non développer, mais pas les deux. – cdkMoose

Répondre

6

dans un fichier de traitement par lots, echo %% foo %% générera% foo%.

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

c:\01Temp>foo 
%foo% 

c:\01Temp> 
+1

D'Oh! J'ai été rejeté car cela ne fonctionne pas sur la ligne de commande si foo est défini (%% foo %% se développe en% bar% sur la ligne de commande). Existe-t-il un moyen autre que le hack (set percent =%) de le faire sur la ligne de commande? – Adisak

1

Dans un fichier batch, utilisez deux %% s, .: par exemple

set foo=1 
echo %%foo%% 

... échos "%% foo", pas "1". Je ne suis pas au courant d'un moyen de le désactiver en mode immédiat (par exemple, pas dans un fichier batch).

+0

Oui, j'ai été éjecté parce que ça ne fonctionnait pas comme je le voulais en mode immédiat, peu importe le nombre de% que j'ai eu à la suite. – Adisak

Questions connexes