2014-11-27 2 views
0

이것은 배치 스크립트를 실행하여 SQL 스크립트를 실행하고 실행 로그를 생성하는 데 사용하는 코드입니다. 이해 좀 도와주세요왜 내 메시지가 꺼지고 구문 오류가 있습니까?

::Echo off will hide all commands written in text file 
@echo off 

    :: Declaring colour appearance of the batch 
    color Af 
    setlocal enabledelayedexpansion 

    ::Declaration of the SQL Server Name. 
    set servername=192.168.90.34 

    :: Declaration of the source path where we will keep script file. 
    set spath=D:\Batch_Test_File\Script_File 

    ::Declaration of the destination Path where we will move script file after successful execution. 
    set dpath=D:\Batch_Test_File\Executed_script\Enterprise_Script 

     :: Creation of the Execution log folder basis of current date. 
     set TIMESTAMP=%DATE:~7,2%%DATE:~4,2%%DATE:~10,4% 
     IF EXIST "%D:\Batch_Test_File\Execution_log\%TIMESTAMP%" (
      echo Folder exist 
      set lpath=D:\Batch_Test_File\Execution_log\%TIMESTAMP% 
      echo %lpath% 
      ) ELSE (
      md "%D:\Batch_Test_File\Execution_log\%TIMESTAMP%" 
      set lpath=D:\Batch_Test_File\Execution_log\%TIMESTAMP% 
      echo %lpath% 
     ) 

    :: Declaration of the credential of the SQL Server 2008 
    set uname=sa 
    set [email protected] 

    :: Defining Flag for capturing error status of script file 
    set temp=0 
    echo temp value1:-%temp% 

    :: Printing ServerName on Which script will apply. 
    echo Server_Name:-%servername% 

    :: Printing Source path of the script file 
    echo File_Path:-%spath% 
    pause 

    :: Listing all files from Source Path 
    set cmd='dir %spath%\*ED*.sql /b/s' 
    echo %cmd% 
    pause 

    ::Creating Log file basis of script file available 



    ::Taken a loop as per the count of file in CMD Variable 
    FOR /f "delims=" %%G IN (%cmd%) DO (
    echo inside loop 
    set _fn=%%G 
    set _fn=!_fn:~31,11! 
    set logfilepath= %lpath%\output_!_fn!.log 
    echo %logfilepath%--Here echo is off coming. If Using echo !logfilepath! then it is printing but not able to capture log further 
    echo logfilepath1 file name here 
    pause 
     FOR /F "tokens=*" %%A in (D:\Batch_Test_File\EnterpriseDatabaseList.txt) do (
      echo Database_Name:- %%A >> %logfilepath%---here throwing syntax error 
      echo ******PROCESSING %%G FILE****** 
      SQLCMD -S%servername% -U %uname% -P %pwd% -d %%A -b -i%%G >> %logfilepath% 
      echo %%G File 
      echo Database_Name:- %%A >> %logfilepath% 
      IF !ERRORLEVEL! EQU 0 echo ******PROCESSED %%G FILE****** >> %logfilepath% 
      IF !ERRORLEVEL! NEQ 0 echo ******NOT PROCESSED %%G FILE****** >> %logfilepath% 
      IF !ERRORLEVEL! NEQ 0 set /a temp+=1 
      echo SQL SERVER ERROR:- !ERRORLEVEL! 
     ) 
    MOVE %%G %dpath% 
    ) 
::pause 
echo temp value2:-%temp% 
pause 
IF %temp% EQU 0 GOTO Success IF NOT GOTO :OnError 

:OnError 
echo ERROR ERROR ERROR 
echo One\more script(s) failed to execute, terminating path. 
echo Check output.log file for more details 
echo File not moved >> %logfilepath% 
pause 
EXIT /b 

:Success 
echo ALL the scripts deployed successfully!! >> %logfilepath% 
pause 
EXIT /b 

도와주세요! 당신은 당신이 lpath을 설정하는 같은 괄호 내 echo %lpath%를 사용하는

답변

1

.

당신도 간단하게 (사용자가 설정 한) 또는 지연 확장을 사용하는 echo !lpath!를 사용하는 경우는 마찬가지로 if() else()

후 에코 logfilepath에 대한. !의

echo Database_Name:- %%A >> 
echo ******PROCESSING %%G FILE****** 
SQLCMD -S%servername% -U %uname% -P %pwd% -d %%A -b -i%%G >> 

당신은 >> !logfilepath!

내가 LogFilePath에와 시도
+0

를 사용해야합니다 에코 라인이 될대로 구문 오류를 얻고있는 이유이기도하다! 결과를 캡처하지만 구문 오류가 표시됩니다. 그리고 내 문제는 아래 코드에서 발생하고 있습니다 FOR/f "delims ="%% G IN (% cmd %) DO ( 루프 내부에 에코 설정 _fn = %% G 세트 _fn =! _ fn : ~ 31,11! set logfilepath = % lpath % \ output _! _ fn! .log echo % logfilepath % - echo! logfilepath!를 사용하면 인쇄 중이지만 로그를 더 캡처 할 수 없습니다. echo logfilepath1 파일 이름은 여기에 있습니다. – user3906232

+0

@ user3906232 ScottC가 말한대로 :'% lpath %'와'% logfilepath %'를'! lpath! '와'! logfilepath!'로 바꾸십시오. – jeb

+0

lpath는 폴더 위치입니다 ..logfilepath는 결과를 캡처해야하는 파일입니다 – user3906232

관련 문제