Я уверен, что это работает просто отлично.Чтобы доказать это, добавьте SET STR
после того, как вы определите значение, и вы увидите правильное значение.
Проблема, с которой вы сталкиваетесь, заключается в том, что при попытке отобразить значение выполняемая строка становится следующей: echo >abcd_
.>
не заключен в кавычки или не экранирован, поэтому он просто принимает выходной результат ECHO без аргументов и перенаправляет его в файл с именем "abcd _"
Если вы не возражаете против просмотра кавычек, измените свойстрока echo "%str%"
, и она будет работать.
Другой вариант - включить и использовать отложенное расширение (я предполагаю, что это код пакетного сценария, а не выполняющийся в командной строке)
setlocal enableDelayedExpansion
set soeid=abcd
set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"
echo !str!
Обычное %var%
расширение происходит на раннем этапе, пока интерпретатор анализирует строку.Отложенное расширение !var!
происходит в конце непосредственно перед его выполнением.Перенаправление обнаружено где-то посередине.Вот почему обычное расширение не работает - интерпретатор видит расширенный символ >
и интерпретирует его как оператор перенаправления вывода.Отложенное расширение скрывает символ >
от интерпретатора до тех пор, пока не будет проанализировано перенаправление.
Для получения дополнительной информации о отложенном расширении введите SET /?
в командной строке и прочитайте, начиная с абзаца, начинающегося с «Наконец», поддержка отложенного расширения переменной среды ... ".