2013-01-16 291 views
21

我正在寫一個批處理文件,我需要輸出一個包含'!'的字符串到另一個文件。但是當我將該字符串回顯給另一個文件時,它會刪除「!」從輸出。%變量%和!變量之間的區別!批處理文件

例如: 輸入:在new_file.txt

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

輸出是:

Hi this is output 

此外,如果輸入是

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

輸出在new_file.txt:

Hello 

因此,它跳過了! (感嘆號)從輸出到new_file。 如果我使用%LINE%,那麼它只是顯示輸出文件的「echo is on」。

請建議一種方法來解決這個問題。

+1

發現當'回波%LINE%''輸出回波是on'那麼你必須在一個街區。你應該多加一點你的代碼 – jeb

+1

這個問題很具誤導性,你不想知道區別,你想知道如何逃避它... –

回答

15

如果已延遲擴展啓用,要輸出一個感嘆號,就需要對其進行轉義。

逃逸感嘆號需要無,一個或兩個插入,這取決於位置。

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

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

在塊!var!%var%之間的差在DOS batch: Why are my set commands resulting in nothing getting stored?

說明批次解析器的解釋可以在How does the Windows Command Interpreter (CMD.EXE) parse scripts?

4

看來你已經叫SETLOCAL EnableDelayedExpansion在代碼中較高。看看here看看那些效果是什麼。

+0

謝謝你的答案。是的,我正在使用這個屬性在我的文件中,因爲這段代碼是在for循環中,我也在這個字符串上執行一些查找/替換操作,所以我必須使用它。 – Vishal

+0

@用戶發送的鏈接給了你對這種副作用的好解釋。我希望它能幫助你理解你正在觀察的行爲。 –