У меня есть 2 местных жителя, использующих отложенное расширение.1. Local вызывает подпрограмму, которая включает 2. Local, которая определяет 2 переменные и устанавливает их значения в качестве значений параметров, используя FOR /F ...
.Это прекрасно работает, если строка не содержит один или несколько восклицательных знаков.Следующий рабочий скрипт показывает проблему:
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
CALL :get_substrings testString substr
ECHO Inside 1. local:
ECHO !testString!
ECHO !substr!
EXIT /B 0
ENDLOCAL
:get_substrings
SETLOCAL ENABLEDELAYEDEXPANSION
SET string="World^! wasserschutzpolizei^!"
SET substring="Hello^!"
ECHO Inside get_substrings:
ECHO !string!
ECHO !substring!
FOR /F "delims=" %%s IN ("!string!") DO FOR /F "delims=" %%b IN ("!substring!") DO (
ENDLOCAL & SET "%1=%%s" & SET "%2=%%b" & EXIT /B 0
)
EXIT /B 0
Вывод:
Inside get_substrings:
"World! wasserschutzpolizei!"
"Hello!"
Inside 1. local:
"World"
"Hello"
Ожидается:
Inside get_substrings:
"World! wasserschutzpolizei!"
"Hello!"
Inside 1. local:
"World! wasserschutzpolizei!"
"Hello!"
Если вы удалите восклицательные знаки в string
иsubstring
скрипт работает как положено.
Поскольку это только пример, рассмотрим ...
- Не использовать отложенное расширение не вариант, а также ...
- Использование одного Local нежелательно.
Конечно, если ДЕЙСТВИТЕЛЬНО требуется одна или обе вещи, и нет другого способа, которым я принимаю другие ответы, указывающие на это.
Итак ...
- Как получить значения с восклицательным знаком в 1. локальном, как я показал в Ожидаемая часть?
- Почему нетэто работает с текущим способом установки значений параметров?
Цените вашу помощь!