2012-01-26 2 views
2

필요에 따라 SQL 명령을 실행하기 위해 .bat 파일을 실행할 필요가 있습니다. iffor에 중첩되어 있고 if이 참일 때까지 반복되어야합니다..bat 파일의 간단한 논리?

내가 무엇을 가지고 :

내가 이동하는 경우는, 루프 안타
@echo off 
cd "%UserProfile%\Desktop\Scripting\" 

FOR /f "delims=" %%a in ('type queue.txt') DO (
:loop 

    IF EXIST reset.sql (

    goto loop 

) ELSE (

    ::Create SQL command 
    echo USE dbname> reset.sql 
    echo EXEC dbo.sp_ResetSubscription @ClientName = '%%a'>> reset.sql 
    echo EXEC dbo.sp_RunClientSnapshot @ClientName = '%%a'>> reset.sql 
    sqlcmd -i "reset.sql" 

    if exist reset.sql del /f /q reset.sql 
) 
) 
if exist queue.txt del /f /q queue.txt

이 폭탄을 :하지만 그 많은 사용 그것이 잘 작동하는 if 문 이내 어디에서 루프 없습니다.

내가해야 할 일은 reset.sql이 존재하지 않을 때까지 루프를 계속 유지하면서 루프의 동일한 반복 내에서 머무르는 것입니다.

답변

2

당신이해야하지 적 GOTO A : 코드의 괄호 블록 내 레이블입니다. https://stackoverflow.com/a/8481978/1012053 참조 - IF() 블록을 처리하지만 개념은 FOR..DO() 블록과 동일합니다. FOR..DO() 내에서 GOTO를 수행하면 반복에 대한 참고의 나머지 중단됩니다 -

이 수정 당신에게 제공한다() 절 FOR/L 루프가 자동으로 실제로 DO를 처리하지 않고 계산 완료됩니다를 당신이 찾고있는 행동.

@echo off 
cd "%UserProfile%\Desktop\Scripting\" 

FOR /f "delims=" %%a in ('type queue.txt') DO (
    call :waitForNoReset 
    ::Create SQL command 
    echo USE dbname> reset.sql 
    echo EXEC dbo.sp_ResetSubscription @ClientName = '%%a'>> reset.sql 
    echo EXEC dbo.sp_RunClientSnapshot @ClientName = '%%a'>> reset.sql 
    sqlcmd -i "reset.sql" 
    if exist reset.sql del /f /q reset.sql 
) 
if exist queue.txt del /f /q queue.txt 
exit /b 

:waitForNoReset 
    if exist reset.sql goto :waitForNoReset 
exit /b 
0

내가 시도 할 것 :

@echo off 
cd "%UserProfile%\Desktop\Scripting\" 

FOR /f "delims=" %%a in ('type queue.txt') DO (
:loop 

    IF NOT EXIST reset.sql (

    ::Create SQL command 
    echo USE dbname> reset.sql 
    echo EXEC dbo.sp_ResetSubscription @ClientName = '%%a'>> reset.sql 
    echo EXEC dbo.sp_RunClientSnapshot @ClientName = '%%a'>> reset.sql 
    sqlcmd -i "reset.sql" 

    if exist reset.sql del /f /q reset.sql 
    goto endIter 
    ) 

    goto loop 
    :endIter 
) 

if exist queue.txt del /f /q queue.txt 
+0

원본과 동일한 이유로 작동하지 않습니다. [내 대답] (http://stackoverflow.com/a/9018647/1012053)을 참조하십시오. – dbenham

관련 문제