2013-11-12 3 views
2

Alright, так скажем, у нас есть файл с именем start.cmdЭкранирование символов в цикле в пакете

@echo off 

set value=1 
for /D %%a in (%*) do (
    echo %%a 
) 

start.cmd вызывается

start.cmd^значение%^% ^% anothervalue ^%

Цикл for, конечно, займет% 1 и% 2 и т. д.

Мой вопрос:

EDIT: Как я могу избежать значение в пределах другого значения?

+0

Возможно, вы обнаружите, что вам нужно использовать ^, потому что значение и другое значение не определены ???? – RGuggisberg

+0

Оба они определены, поэтому он был заменен на 1, поэтому он был определен. –

+2

Не понимаю. Что вы получаете от исполнения и что вы должны получить? –

ответ

1

я сделать предположение:

Вы хотите расширить переменные только в течение цикла, а не раньше.

В вашем случае вам нужно только добавить CALL, так как он запустит парсер во второй раз, так что он может развернуть %value%, прежде чем он повторит его.

@echo off 

set value=1 
for /D %%a in (%*) do (
    call echo %%a 
) 

Но лучше использовать замедленное расширение здесь

@echo off 
setlocal EnableDelayedExpansion 
set value=1 
for /D %%a in (%*) do (
    echo %%a 
) 

Затем вы можете начать свою партию с

start.cmd !value! !anothervalue! 

Это работает как отложенное расширение осуществляется после расширения процентов анализатора , поэтому %* расширился до !value! !anothervalue!, а затем расширился до 1 xyz

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