2013-01-01 19 views
14

Ho una variabile che contiene e commerciali e ho bisogno di creare un'altra variabile che contiene il primo. Conosco il carattere "&" can be escaped with carret (^) ma non ho idea di come sfuggire il testo all'interno di una variabile.Escape e commerciali in variabili - win batch

set Name1 = Red ^& Green 
set Name2 = %Name1% ^& Blue 

'verde' non è riconosciuto come comando interno o esterno, un programma eseguibile o un file batch.

Non riesco nemmeno a "echo" le variabili che contengono e commerciali - ottengo lo stesso errore.

Ho bisogno di usare le variabili al fine di digitare il loro contenuto con l'uscita o di manipolare file denominati dalle variabili come

type "%Name1%.txt" 
type "%Name2%.txt" 

risposta

18

La soluzione più semplice è quello di utilizzare le virgolette per l'assegnazione, e l'espansione in ritardo. Ciò elimina qualsiasi necessità di fuga.

@echo off 
setlocal enableDelayedExpansion 
set "Name1=Red & Green" 
set "Name2=!Name1! & Blue" 
echo !Name2! 

Se si dispone di una combinazione di testo quotato e non quotato, a volte è necessario sfuggire alcuni caratteri. Ma questo è necessario solo per l'incarico iniziale. Il contenuto di una variabile non deve mai essere sfuggito quando si utilizza l'espansione ritardata.

@echo off 
setlocal enableDelayedExpansion 
set var="This & that" ^& the other thing. 
echo !var! 
+0

utilizzando enableDelayedExpansion mi consente di utilizzare le variabili. Pertanto -> digita "% Name1% .txt" <- funziona. Per il momento questa sembra la soluzione migliore.Grazie – BearCode

+0

non la soluzione più semplice, vedere la mia risposta sotto –

5

Purtroppo, si dovrà raddoppiare sfuggire ai segni & dal momento che è in corso di valutazione due volte o posizionare il valore variabile tra virgolette.

set Name1=Red ^^^& Green 
set Name2=%Name1% ^& Blue 

Ma è necessario aggiungere un altro set di escape per quando viene utilizzato Nome2. Che diventa un grande dolore.

set Name1=Red ^^^^^& Green 
set Name2=%Name1% ^^^& Blue 

o utilizzare citazioni (consigliato)

set "Name1=Red ^& Green" 
set "Name2=%Name1% ^& Blue" 
0

due soluzioni vengono in mente, nessuno dei quali è sufficientemente generale, ma entrambi "lavoro":

  1. Tenere sempre cose tra virgolette e rimuoverle quando è necessario, come indicato nella soluzione precedente.
  2. Re quote-le & 's: set nome2 =% NAME1: & =^&%^& Blu
+1

La sintassi per # 2 doesn fuggirò perfino dalle proprie e commerciali e tanto meno servirà a scappare la sua. –

-2

La soluzione più semplice sarebbe questo:

for /f "delims= usebackq" %a in (`echo "First & ? * Last"`) do echo # %~a 

... in uno script batch:

for /f "delims= usebackq" %%a in (`echo "First & ? * Last"`) do echo # %%~a 

o

for /f "delims= usebackq" %%a in (`echo "%~1"`) do echo # %%~a 
+0

Questo non risponde alla domanda, che riguarda le variabili di ambiente – dbenham

+0

Dove in questa pagina è menzionata la parola "ambiente"? A differenza della tua risposta, in realtà coinvolge il parametro di input. Il tuo funziona solo con stringhe hardcoded. Vedo che qualcuno è un po 'amaro qui ... –

+0

E ovviamente la mia soluzione funziona anche per le variabili ambientali, non c'è differenza, niente di speciale su di loro. E lo sai molto bene. –

Problemi correlati