2015-04-29 5 views
1

В командной строке Windows я пытаюсь заменить пространство в set string=Hello World на строку %20. Наивно пытаться использовать строковый литерал% 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

Это приводит к 'Hello World str2'. Помните: я делаю это в cmd.exe не из файла '.bat' – nfs

+0

@SheridanVespo, вы правы, и я сделал редактирование. Ich liebe den Scheiß! ':-)' – Endoro

+0

Абсолютный спасатель. Не могли бы вы прокомментировать пример, поскольку 'for()' немного черная магия. Постскриптум для тех, кто хочет сделать это в пакетном скрипте, есть: https://stackoverflow.com/questions/2772456/string-replacement-in-batch-file. –

Смежные вопросы