Удалить подстроку из строки - PullRequest
0 голосов
/ 18 апреля 2019

Как удалить подстроку, переданную переменной, из строки в for и других циклах (требуется delayedExpansion)?

я нашел %%:

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;


set "v=1!br!2!br!3"
set v=%%v:%br%=%%
echo !v!

но, похоже, он не работает и не будет работать, если переменная v будет меняться между итерациями (когда %..% должно быть !..!).

Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 18 апреля 2019

Вы нашли %%, но, очевидно, вы нашли не всю необходимую информацию. Во-первых, br должен использоваться как !br!. %br% не работает. Во-вторых, запись %%var%% должна использоваться с call (форсирование второго слоя синтаксического анализа):

@echo off
setlocal enableExtensions enableDelayedExpansion
cd /D "%~dp0"
set br=^


rem br;

set "v=1!br!2!br!3"
call set "v=%%v:!br!=%%"
echo !v! (also: %v%)
0 голосов
/ 18 апреля 2019

Вот еще один пример с некоторыми Rem arks:

@Echo Off
Rem Using delayed expansion is necessary for this task.
SetLocal EnableDelayedExpansion
Rem The two empty lines are necessary to set br to a new line.
Set br=^


Rem Use the variable named br to set a variable named v to a multiline value.
Set "v=1!br!2!br!3"
Rem You can output all variable names beginning with v with their values using the below command.
Set v
Rem You can output the value for the variable named v using the below command.
Echo !v!
Pause

Если вы не можете гарантировать, что переменная с именем v будет иметь значение:

  • Чтобы предотвратить вывод четвертой последней строки Environment variable v not defined, вместо этого следует использовать Set v 2>Nul.

  • InДля предотвращения вывода второй последней строки ECHO is off. вместо этого следует использовать Echo(!v!.

Чтобы удалить все экземпляры строкового значения !br! из текущегоСуществующая переменная с именем v, вам потребуется оператор Call, чтобы ввести другой уровень синтаксического анализа:

Rem Expand the variable named v and substitute the string value of the variable named br with nothing.
Call Set "v=%%v:!br!=%%"
Rem You can output the new value for the variable named v using the below command.
Echo(!v!
Rem However as Delayed Expansion is no longer necessary, you could instead use.
Echo(%v%
0 голосов
/ 18 апреля 2019

Вы также можете использовать echo| set /p = в цикле for.

@echo off
setlocal enableDelayedExpansion
cd /D "%~dp0"
set br=^


:# Above 2 lines must be empty.
set "v=1!br!2!br!3"
for %%i in (!v!) do echo| set /p =%%i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...