2013-06-28 1 views
2

Я пытаюсь избежать амперсанд в заявлении FOR/F в окна командной строки сценария следующим образом:Ampersand как DELIM в FOR/F заявление

FOR /F "tokens=1,2 delims=^&" %%A IN ("%Var%") DO (... 

Результат от запуска сценария до сих пор:

& was unexpected at this time 

Каков правильный способ использования & в качестве делиметра? Или он должен быть заменен чем-то другим в строке, подлежащей анализу?

+1

Ошибка не указана в коде, который вы указали. Этот тест работает «TO/F» tokens = 1,2 delims =^& "%% A IN (" 123 & 456 ") Do echo %% A, %% B'. Но '^ &' определяет амперсанд и карету в качестве разделителей – jeb

+0

@jeb - это вполне может быть в показанном коде, в зависимости от значения '% Var%'. – dbenham

+0

Вы должны принять ответ, который решил вашу проблему. – foxidrive

ответ

5

Амперсанд уже сбрасывается двойными кавычками. Поэтому более маскирование не является необходимым и успешным:

@echo OFF &SETLOCAL 
for /f "delims=&" %%i in (file) do echo %%i 
2

Как Endoro уже говорилось, что вам не нужно, чтобы избежать & в пределах вашей спецификации delims.

Ваша ошибка, вероятно, связана с расширением "%Var%". Если ваше значение содержит оба кавычки и & таким образом, что & не цитируется после расширения, то это точно ошибка, которую вы получите. Помните, что кавычки в вашем заявлении могут быть отменены кавычками в пределах значения.

Вы могли бы решить эту проблему, используя замедленного расширение

setlocal enableDelayedExpansion 
FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (... 

Но если ваше значение также содержит !, то вам нужно отключить отложенное расширение, прежде чем вы расширить ваше переменные, в противном случае расширенных значения будут поврежден.

setlocal enableDelayedExpansion 
FOR /F "tokens=1,2 delims=&" %%A IN ("!Var!") DO (
    endlocal 
    ... 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^