2012-08-09 271 views
7

使用變量時,我無法讓此批處理文件執行子字符串替換。具體當!!原創!變量被指定;如果它是一個文字字符串,它工作正常。但是,這不會對我的用法。使用變量的批處理文件子字符串替換

setlocal ENABLEDELAYEDEXPANSION 
set original=chair 
set replacement=table 
set str="jump over the chair" 
set str=%str:!original!=!replacement!% 

您的幫助是非常感謝。

回答

3

您已將您的擴展訂單調換。

正常(%)的膨脹發生在分析時(1)
延遲(驚歎號)膨脹發生在運行時(2日)

搜索和替換條款必須在搜索之前進行擴展和替換可以發生。所以,你想:

set str=!str:%original%=%replacement%! 
+0

謝謝,這可能是我的另一個問題。我認爲我的問題是缺乏理解IF語句如何在批處理文件中工作。我把它放在我的IF語句的THEN部分,我相信這就是爲什麼我只有一個變量被評估的結果。此鏈接幫助我:http://stackoverflow.com/questions/4367297/how-to-substitute-variable-contents-in-dos – delpium 2012-08-10 00:19:45

12

如果使用call您可以setlocal enabledelayedexpansion做到這一點,而不需要像這樣:

call set str=%%str:%original%=%replacement%%%

注:這首先被解析到call set str=%str:chair=table%

相關問題