2013-01-16 21 views
21

Sto scrivendo un file batch in cui ho bisogno di produrre una stringa contenente '!' in un altro file. Ma quando echo quella stringa in un altro file, rimuove "!" dall'output.Differenza tra% variabile% e! Variabile! nel file batch

Es: Input:

set LINE=Hi this is! output 
echo !LINE!>>new_file.txt 

Portata in new_file.txt è:

Hi this is output 

Inoltre, se l'ingresso è

set LINE=Hello!! this is output!! 
echo !LINE!>>new_file.txt 

Portata in new_file.txt:

Hello 

Quindi, salta il! (Punto esclamativo) dall'output a new_file. Se utilizzo% LINE%, visualizza semplicemente "echo is on" nel file di output.

Si prega di suggerire un modo per superare questo problema.

+1

Quando 'echo% LINE%' 'uscite eco è on' allora devi essere in un blocco. Dovresti aggiungere un po 'di più del tuo codice – jeb

+1

La domanda è molto fuorviante, non vuoi sapere la differenza, vuoi sapere come evaderlo ... –

risposta

15

Se è stata attivata l'espansione ritardata e si desidera emettere un punto esclamativo, è necessario scappare.

L'escaping dei punti esclamativi non richiede nessuno, uno o due accenti, a seconda della posizione.

@echo off 
set test1=Test1! 
setlocal EnableDelayedExpansion 
set test2=Test2^^! 
set "test3=Test3^!" 

echo !test1! 
echo !test2! 
echo !test3! 

La differenza tra !var! e %var% in blocchi è illustrato sul DOS batch: Why are my set commands resulting in nothing getting stored?

Una spiegazione del parser batch può essere trovato alla How does the Windows Command Interpreter (CMD.EXE) parse scripts?

4

Sembra che tu abbia chiamato SETLOCAL EnableDelayedExpansion da qualche parte più in alto nel codice. Dai uno sguardo allo here per vedere quali sono gli effetti.

+0

Grazie per la risposta. Sì, sto usando questo proprietà nel mio file in quanto questo codice è in un ciclo for e sto anche eseguendo alcune operazioni di ricerca/sostituzione su questa stringa, quindi devo usarlo. – Vishal

+0

@User il link che ho inviato ti dà una buona spiegazione sugli effetti collaterali di quello. Spero che ti aiuterà a capire il comportamento che stai osservando. –

Problemi correlati