2015-02-18 21 views
0

Это мои первые шаги в окнах пакетирования и Я вопрос,переменная повторное использование после резки строки

Если я добавил это в файл сценария:

IF %p_monitorName%=="workflow_failed" (
    for /F "tokens=1 delims=," %%a in ("%p_monitorStatus: by =.%") do for /F "tokens=3 delims=:" %%b in ("%%a: by =.%") do for /F "tokens=1 delims= " %%c in ("%%b by =.%") do echo %%c >> %scriptdir%\..\logs\SIS2OVOOutput.txt 
) 

Он работает, но если я пытался использовать %% c где-нибудь еще в скрипте это не удалось, есть ли у вас какие-либо предложения?

+0

Вы должны показать, что вы пробовали это не удается, и описать результат, который вы хотите. – dbenham

+0

Если вам нужно значение в параметре 'for' replaceable из команды' for', сохраните его в переменной 'set 'value = %% c" ' –

+0

@MCND: Это не работает – user212051

ответ

1

Переменные формы %%c действительны только в контексте цикла FOR. Они не определены или недоступны вне цикла FOR. Если вы должны получить доступ к значению за пределами цикла, передайте значение переменной окружения или аргументу CALL из цикла.

FOR переменные являются глобальными по всем циклам FOR. Обычно вы не можете получить доступ к переменным FOR из подпрограммы, которая была выбрана из цикла. Но вы можете получить доступ, создав новый цикл FOR.

Использование нормального расширения %A% в пределах цикла (в любом блоке круглых скобок) не может получить доступ к новому значению, установленному в том же блоке. Вместо этого следует использовать отложенное расширение !A!. Задержка расширение должно быть включено через setlocal enableDelayedExpansion

@echo off 
setlocal enableDelayedExpansion 
set "A=Old Value" 
for /f "delims=" %%A in ("Loop Value") do (
    echo Value within loop: %%A 
    set "A=%%A" 
    echo Value of %%A%% within loop: %A% 
    echo Value of ^^!A^^! within loop: !A! 
    call :sub "%%A" 
) 
for %%X in (dummy) do echo Value within X loop after A loop over: %%A 
echo Value of %%A%% persists: %A% 
exit /b 

:sub 
echo Value outside of loop: %%A 
echo value of %%A%%: %A% 
echo Value of %%A%% within subroutine: %A% 
echo Value of ^^!A^^! within subroutine: !A! 
echo value of %%~1: %~1 
for %%X in (dummy) do echo Value within X loop while in subroutine: %%A 
exit /b 

--OUTPUT--

Value within loop: Loop Value 
Value of Loop Value% within loop: Old Value 
Value of !A! within loop: Loop Value 
Value outside of loop: %A 
value of %A%: Loop Value 
Value of %A% within subroutine: Loop Value 
Value of !A! within subroutine: Loop Value 
value of %~1: Loop Value 
Value within X loop while in subroutine: Loop Value 
Value within X loop after A loop over: %A 
Value of %A% persists: Loop Value