2015-04-29 111 views
1

在Windows命令提示符中,我試圖用字符串%20替換set string=Hello World中的空格。天真地試圖用字符串字面量20%這樣的:如何用cmd.exe中的百分比字符替換?

set string=%string: =%20% 

結果HelloWorld20%。嘗試使用轉義字符^這樣的:

set string=%string: =^%20% 

也導致HelloWorld20%。試圖通過像這樣加倍逃避%

set string=%string: =%%20% 

結果HelloWorld%20%。我還試圖用另一個變量做替換這樣的:

set r=%20 
set string=%string: =%r%% 

導致HelloWorldr%%

我找到了this,它處理變量中字符百分比的轉義。我還發現this,它處理百分號字符的轉義輸入。但似乎都不適用於字符串替換。

A tutorial/docu page for the Windows cmd.exe我在網上發現告訴我我有正確的語法,但不包括替換百分比字符。

閱讀這些之後,我想:

setlocal EnableDelayedExpansion 
set string=!string: =%20! 

導致!string: =%20!

我不知道,你能幫忙嗎?

回答

3

你在這種情況下,需要delayed expansion:!!!

set "str1=Hello World!" 
set "str2=%20" 
for /f "delims=" %a in ('cmd /v:on /c @echo "%str1: =!str2!%"') do set "str3=%~a" 
echo %str3% 

What is delayed expansion?

+0

導致'你好STR2世界'。請記住:我在cmd.exe中這樣做不是來自'.bat'文件 – nfs

+0

@SheridanVespo你是對的,我做了一個編輯。 Ich liebe denScheiß! ':-)' – Endoro

+0

絕對救生員。你會介意評論這個例子,因爲for()有點黑魔法。附:對於那些想要在批處理腳本中執行此操作的用戶,請訪問:https://stackoverflow.com/questions/2772456/string-replacement-in-batch-file。 –