Установите переменную в другую переменную в операторе for - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь установить переменную оператора for в другую переменную. Когда я делаю это:

for /f "tokens=* delims= " %%p in (plugins.txt) do set pp = %%p

Работает правильно. Но я хочу сделать больше, поэтому я делаю это после (и теперь это не работает. Почему это и как я могу это решить?

for /f "tokens=* delims= " %%p in (plugins.txt) do (
set pp = %%p
echo %pp%
echo %pp%
echo %%p)

РЕДАКТИРОВАТЬ: добавлен ввод и желаемый вывод

содержимое plugins.txt
http://subversion/svn/dotCMSPlugins/CustomLogin/trunk

Желаемый вывод
CustomLogin

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Настройка работает, но расширение работает иначе, чем ожидалось.

Процентное расширение будет выполнено в момент разбора блока скобок, а не в момент выполнения отдельных команд. Как cmd.exe анализирует скрипты

Btw. Использование пробелов в операторе set не является хорошей идеей, поскольку создает переменную с пробелом, в вашем случае set pp = %%p создает переменную с именем pp<space> со значением <space><content of %%p.

Вы можете получить желаемые результаты с помощью отложенного расширения.

setlocal EnableDelayedExpansion
for /f "tokens=* delims= " %%p in (plugins.txt) do (
  set "myVar=%%p"
  set "myVar=!myVar:subversion/svn/dotCMSPlugins/=!"
  set "myVar=!myVar:/trunk=!"
  echo !myVar!
)
2 голосов
/ 25 марта 2012

Если ваш входной файл содержит эту строку:

subversion/svn/dotCMSPlugins/CustomLogin/trunk

и вы хотите получить такой результат:

CustomLogin

, тогда самый простой способ - разделить строку в токенах с помощью /и возьмите 4-й жетон следующим образом:

setlocal EnableDelayedExpansion
for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
  set "myVar=%%p"
  echo !myVar!
)

Если цель FOR - просто получить этот результат, то отсроченное расширение даже не нужно:

for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
  set "myVar=%%p"
)
echo %myVar%
...