Пакетная конкатенация строк - PullRequest
7 голосов
/ 23 февраля 2012

Я пытаюсь создать пакетную строку следующим образом: > abcd_

У меня есть переменная soeid со значением abcd.Вот что я делаю, но это не работает.

set soeid=abcd

set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"

echo %str%

1 Ответ

13 голосов
/ 23 февраля 2012

Я уверен, что это работает просто отлично.Чтобы доказать это, добавьте 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 /? в командной строке и прочитайте, начиная с абзаца, начинающегося с «Наконец», поддержка отложенного расширения переменной среды ... ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...