2010-05-05 115 views
68

我們可以使用下面的命令字符串替換在批處理文件

set str="jump over the chair" 
set str=%str:chair=table% 

這些線條做工精細替換一個批處理文件字符串和更改爲「跳在桌子上」串「在椅子上跳」。現在我想用一些變量替換字符串中的「椅子」一詞,我不知道該怎麼做。

set word=table 
set str="jump over the chair" 
?? 

任何想法?

+0

可能重複字符串](http://stackoverflow.com/questions/5816178/how-to-replace-string-inside-a-bat-file-with-command-line-parameter-string)它有更多的非正式答案(它有與這裏的答案相同的解決方案雖然) – Fr0sT 2015-03-18 07:25:02

+1

現在誰是誰並不重要,但很好鏈接相同的問題並指向最無法理解的答案 – Fr0sT 2015-03-25 12:26:03

回答

56

您可以使用!,但您必須擁有ENABLEDELAYEDEXPANSION開關組。

setlocal ENABLEDELAYEDEXPANSION 
set word=table 
set str="jump over the chair" 
set str=%str:chair=!word!% 
57

您可以使用下面的小竅門:

set word=table 
set str="jump over the chair" 
call set str=%%str:chair=%word%%% 
echo %str% 

call有原因的變量擴展另一層,因此有必要引用原%跡象,但一切最終的作品出來。

+0

我喜歡這個解決方案,在批處理文件中轉義字符串總是有問題,ENABLEDELAYEDEXPANSION只是增加了另一個字符而引起擔心。 – Anders 2010-05-05 19:43:20

+5

關於由喬伊提供的答案的重要事項**。您需要將代碼放入批處理文件才能正常工作。 如果您只是在命令行中測試它,它將返回意外的「%」跳過「word %%%」。 請注意,批處理文件和命令行中的代碼可能會產生不同的結果。 – dadhi 2014-04-23 05:42:41

+0

建立在dadhi的即時評論上,命令行的解決方案在這裏:https://stackoverflow.com/questions/29944902/how-to-replace-with-percent-character-in-cmd-exe。 – 2017-06-16 18:46:03

-4

C:> replace.bat 「123def789」, 「DEF」, 「456」


 replace.bat 

setlocal enabledelayedexpansion 
set data=%1 
set search=%2 
set replace=%3 
set "data=!data:%search%=%replace%!" 
echo %data% 
REM Use %data% here before calling endlocal. 
endlocal 
的[如何更換使用命令行參數一個bat文件內字符串
+0

這是幹什麼用的?未來的訪問者可能根本不理解這些代碼。 – SteveFest 2017-07-07 05:29:48

+0

這裏我想提一提你需要在endlocal之前使用變量數據。 – 2017-07-11 04:32:14

相關問題