0

Recently I have written a Windows batch script for downloading files from SFTP location. I have used the command SCPG3 provided by SSH Tectia software for this purpose. The script runs fine without any errors when it is manually run or when scheduled through Windows task scheduler.

But the real problem comes when the script is scheduled in Control-M. The script stops executing exactly at command SCPG3. The command is meant for connecting to SFTP location and downloading the required files.

@echo off

IF "%OS%" == "Windows_NT" setlocal enabledelayedexpansion enableextensions

SET ICS_CURRENT_DIRECTORY=F:/SCBUtility/ICSInterface
set count=0
set nullCount=0
For /F "tokens=1* delims==" %%A IN (%ICS_CURRENT_DIRECTORY%/ICSSymphonyDailyJob.properties) DO (
    IF "%%A"=="SYMPHONY_ZIP_DOWNLOAD_DRIVE" set SYMPHONY_ZIP_DOWNLOAD_DRIVE=%%B
    IF "%%A"=="SYMPHONY_ZIP_DOWNLOAD_LOCATION" set SYMPHONY_ZIP_DOWNLOAD_LOCATION=%%B
    IF "%%A"=="SYMPHONY_DOWNLOAD_SFTP_URL" set SYMPHONY_DOWNLOAD_SFTP_URL=%%B
    IF "%%A"=="SYMPHONY_DOWMLOAD_PATH" set SYMPHONY_DOWMLOAD_PATH=%%B
    IF "%%A"=="SYMPHONY_LOG_FILE" set SYMPHONY_LOG_FILE=%%B
    IF "%%A"=="SYMPHONY_DOWNLOAD_FILE_FORMAT" set SYMPHONY_DOWNLOAD_FILE_FORMAT=%%B
    IF "%%A"=="SYMPHONY_FILE_PATTERN" set SYMPHONY_FILE_PATTERN=%%B
    IF "%%A"=="SYMPHONY_FILES_DOWNLOAD_FREQUENCY" set SYMPHONY_FILES_DOWNLOAD_FREQUENCY=%%B
    IF "%%A"=="SYMPHONY_REKON_FILE" set SYMPHONY_REKON_FILE=%%B
)

Echo %date% %time% -----------------------------Extracting Symphony zip files from SFTP Location---------------------- >> %SYMPHONY_LOG_FILE%

%SYMPHONY_ZIP_DOWNLOAD_DRIVE%:
IF NOT EXIST "%SYMPHONY_ZIP_DOWNLOAD_LOCATION%" MKDIR "%SYMPHONY_ZIP_DOWNLOAD_LOCATION%"
set CURRENT_DIR=%SYMPHONY_ZIP_DOWNLOAD_LOCATION%
cd %CURRENT_DIR%

set x=%SYMPHONY_FILES_DOWNLOAD_FREQUENCY%
set i=-1

for /L %%A in (1,1,%x%) do (
    set /a i=!i!+1
    call:myDateFunc %i%
)

call :fileCounter %SYMPHONY_ZIP_DOWNLOAD_LOCATION%

if %count% NEQ %nullCount% (
    call %ICS_CURRENT_DIRECTORY%/Symphony_Archive.cmd
    call %ICS_CURRENT_DIRECTORY%/Symphony_Temp_Move.cmd
    goto :eof
) ELSE (
    Echo No files available for download.
    Echo  %date% %time% no Symphony files are available for download >> %SYMPHONY_REKON_FILE%
    Echo  %date% %time% no Symphony files are available for download >> %SYMPHONY_LOG_FILE%
    Exit /b %ERRORLEVEL%
)


:fileCounter
echo %SYMPHONY_ZIP_DOWNLOAD_LOCATION%
for %%a in (""%SYMPHONY_ZIP_DOWNLOAD_LOCATION%\*.zip"") do set /a count+=1
Echo no of symphony zip files downloaded:: %count%
Echo %date% %Time%: no of symphony zip files downloaded from SFTP location: %count% >> %SYMPHONY_REKON_FILE%
Echo %date% %Time%: no of symphony zip files downloaded from SFTP location: %count% >> %SYMPHONY_LOG_FILE%
goto :eof


:myDateFunc
for /f %%a in ('"powershell [DateTime]::Now.AddDays(-%i%).ToString('yyyy-MM-dd')"') do (
    ECHO %DATE%  %TIME% : CHECKING FOR ZIPS FOR DATE : %%a >> %SYMPHONY_LOG_FILE%
    scpg3 -p >> %SYMPHONY_LOG_FILE% %SYMPHONY_DOWNLOAD_SFTP_URL%:%SYMPHONY_DOWMLOAD_PATH%%SYMPHONY_FILE_PATTERN%%%a_%SYMPHONY_DOWNLOAD_FILE_FORMAT% %SYMPHONY_ZIP_DOWNLOAD_LOCATION%
    ECHO %DATE%  %TIME% : CONNECTION TO SFTP LOCATION SUCCESSFULL!! >> %SYMPHONY_LOG_FILE%
    ECHO CONNECTION TO SFTP LOCATION SUCCESSFULL!!

    IF %ERRORLEVEL% EQU 0 (
        ECHO %ERRORLEVEL%
        ECHO DOWNLOADING ZIPS FOR THIS DATE : %%a
        ECHO %DATE%  %TIME% : DOWNLOADED ZIPS ON THIS DATE : %%a >> %SYMPHONY_LOG_FILE%
    ) ELSE (
        ECHO %ERRORLEVEL%
        ECHO NO ZIPS AVIALABLE FOR DOWNLOADING ON THIS DATE : %%a
        ECHO %DATE%  %TIME% : NO ZIPS AVIALABLE FOR DOWNLOADING ON THIS DATE : %%a >> %SYMPHONY_LOG_FILE%

    )
)
Exit /b %ERRORLEVEL%

The script stops on reaching the command line:

scpg3 -p >> %SYMPHONY_LOG_FILE% %SYMPHONY_DOWNLOAD_SFTP_URL%:%SYMPHONY_DOWMLOAD_PATH%%SYMPHONY_FILE_PATTERN%%%a_%SYMPHONY_DOWNLOAD_FILE_FORMAT% %SYMPHONY_ZIP_DOWNLOAD_LOCATION%

Even usage of this command line with full file name of scpg3 does not solve the problem:

"C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia Client\scpg3.exe" -p >> %SYMPHONY_LOG_FILE% %SYMPHONY_DOWNLOAD_SFTP_URL%:%SYMPHONY_DOWMLOAD_PATH%%SYMPHONY_FILE_PATTERN%%%a_%SYMPHONY_DOWNLOAD_FILE_FORMAT% %SYMPHONY_ZIP_DOWNLOAD_LOCATION%

I have provided all the required security permissions.

Can anybody help me to navigate trough this issue?

Mofi
  • 46,139
  • 17
  • 80
  • 143
ram
  • 41
  • 1
  • 8
  • You run scpg3 without any path, is it available in the context of control-M? –  Aug 21 '17 at 09:02
  • Hi Mofi,Thanks for your suggestions ,Actually i am very new to Batch scripting, sry for my bad coding skills, But the code runs fine when it is run manually or trough task scheduler and it downloads all the files for the specified number of days. – ram Aug 21 '17 at 10:10
  • Hi LotPings,yes it is available in the context of control-M – ram Aug 21 '17 at 10:13
  • What i have observed from the logs is that the script stops working at the command SCPG3 ,it enters the loop and also prints the "CHECKING FOR ZIPS FOR DATE" in the log file – ram Aug 21 '17 at 10:34
  • Hi Mofi , scpg3 path is already defined in the path variable of environment.Thats why i am not facing any issue while scheduling in task scheduler. – ram Aug 22 '17 at 09:42
  • I have even provided the complete path "C:\Program Files (x86)\SSH Communications Security\SSH Tectia\SSH Tectia Client\scpg3.exe" in the script, and it is not showing any error while manually run,But through control M it is not running. – ram Aug 22 '17 at 10:44

0 Answers0