Is there a way to check for completed download and only move a bunch of files after completion?

Advertisement

Hooba
Guest

Is there a way to check for completed download and only move a bunch of files after completion?

Here is what I have. We have a SFTP that we download a list of files from. After the files are downloaded to a staging location, they then need to be FTP'ed over to another SFTP site and then moved to an archive folder within the staging directory (and also removed from the original SFTP site)

Here's the issue. The company wants to issue a "check", where the files do not get FTP'ed over or moved to an archive folder unless they are successfully downloaded in the first place. Is this possible to do? I already have the job writing to a log file, so I figured I could rely on what's within the log file to be able to do this. However, this does not seem to be what is wanted.

Also, is there a way to send an e-mail notification other than using sendmail?

To give you an idea of what we have:
REM Don't show any command line stuff, by turning echo off.
@ECHO OFF
 
REM Generate a script file to use for WinSCP, this avoids a second text file from needing to exist.
echo option batch abort > test.tmp
echo option confirm off >> test.tmp
echo open sftp://username:password@sftpsite >> test.tmp
echo cd "/SFTPDIRECTORY" >> test.tmp
echo option transfer binary >> test.tmp
echo GET  *.FILENAMENJ* "S:\stagingdirectory\" >> test.tmp
echo rm *.FILENAMENJ* >> test.tmp
echo close >> test.tmp
echo exit >> test.tmp
 
REM Run WinSCP, use the temp script created above, and set log file location.
"C:\Program Files\WINSCP\WinSCP.com" /console /script=test.tmp /log="C:\LOCALDIRECTORY\TestBackup.log"
"C:\LOCALDIRECTORY\TestPut.bat"   -- (THIS IS ANOTHER SCRIPT TO PUT THE FILES TO ANOTHER SFTP.. LISTING BELOW)
 
REM See if script completed
if errorlevel 1 goto error
 
cls
echo SUCCESSFULLY DOWNLOADED TESTFILES
goto end
 
:error
cls
echo ERROR DOWNLOADING TESTT FILES, CHECK LOG: 'C:\LOCALDIRECTORY\TestBackup.log'
 
:end
close
This is testput.bat that the prior script is calling
REM Don't show any command line stuff, by turning echo off.
@ECHO OFF
 
REM Generate a script file to use for WinSCP, this avoids a second text file from needing to exist.
echo option batch abort > testputscript.tmp
echo option confirm off >> testputscript.tmp
echo open sftp://username:password@SFTPTOPUTFILES >> testputscript.tmp
echo option transfer binary >> testputscript.tmp
echo cd /DIRECTORYTOPUTFILES >> testputscript.tmp
echo put S:\stagingdirectory\*.FILENAMENJ* >> testputscript.tmp
echo close >> testputscript.tmp
echo exit >> testputscript.tmp
 
REM Run WinSCP, use the temp script created above, and set log file location.
"C:\Program Files\WINSCP\WinSCP.com" /console /script=testputscript.tmp /log="C:\LOCALDIRECTORY\testPutBackup.log"
MOVE \stagingdirectory\*.FILENAMENJ* \stagingdirectory\Archive
 
REM See if script completed
if errorlevel 1 goto error
 
cls
echo SUCCESSFULLY UPLOADED TESTPUT FILES
goto end
 
:error
cls
echo ERROR UPLOADING TEST FILES, CHECK LOG: 'C:\LOCADIRECTORY\TestPutBackup.log'
 
:end
close

Reply with quote

Advertisement

martin
Site Admin
martin avatar
Joined:
Posts:
41,518
Location:
Prague, Czechia

Re: Is there a way to check for completed download and only move a bunch of files after completion?

You can use an XML log file to collect files that were initially downloaded and generate post-upload delete script based on that.
https://winscp.net/eng/docs/logging_xml

Though it would be easier to use PowerShell script using WinSCP .NET assembly.

This example is close to what you look for, except that you need two sessions and delete the files uploaded over the second session from the first session, instead of moving local files:
https://winscp.net/eng/docs/script_local_move_after_successful_upload

This example has also some code that you may reuse (for deleting the remote files):
https://winscp.net/eng/docs/library_example_delete_after_successful_download

Reply with quote

Hooba
Guest

Ok, I misunderstood what exactly was needed. Apparently, they want a CHECK after EVERY action and for it to not continue on to the next action unless the prior one is successful. If it fails, then do something (such as send an e-mail or whatever we choose). Is there a way to do this after EVERY action?

Reply with quote

Advertisement

You can post new topics in this forum