Topic "Synchronize Script - External Command After Each File Sync?"

Author Message
gsidhu
[View user's profile]

Joined: 2014-06-05
Posts: 2
Hi there,
I am wondering whether it is possible to execute an external command after each file has been synchronized using the synchronize feature in WinSCP? Ie., I would like to run an unzip command if the file has been updated, and move the files to a separate, unique directory. Currently, I am using 7-Zip batch scripts to unzip and move archives, but would like to simplify it within the WinSCP script itself, if possible.
Or, if there is a means to trigger the 7-Zip batch files if a new archive has been synced, that would also be great.

\Staging Folder
-> \Database 1
->Database.zip - No Sync Required
-> \Database 2
->Database2.zip - File Updated (File to be unzipped and moved)
-> \Database 3
->Database.zip3 - No Sync Required
-> \...

The batch and script that I am currently using are as following:

Code:

winscp.com /script="F:\Scripts\ScriptNotificationTest.txt" /log="F:\Scripts\FTPNotificationTestLog.txt"
if errorlevel 1 goto error

echo Synchronization Successful.
goto end

:error
echo Synchronization Failed.

end:


Script:

Code:

#Automatically abort script on errors
option batch abort

#Disable overwrite confirmations that conflict with the previous
option confirm off

#Connect to ******* server using existing login credentials
open *******

#Synchronize database releases
#Synchronize Test Zip
synchronize local -criteria=time -resumesupport=on -filemask="TestZipFile.zip" "F:\*******\Databases\Stage\Test\"

#Synchronize Test Zip 2
synchronize local -criteria=time -resumesupport=on -filemask="TestZipFile2.zip" "F:\*******\Databases\Stage\Test\"


Thanks!
Advertisements
Guest




+Update:
I tried to create a second batch script to extract and move the synchronized files as required. Works fine when executed on it's own. However, I am now trying to have it execute automatically after synchronization has completed. I have tried to combine the two scripts into one with no luck. Any suggestions? Thanks!

Code:
"C:\Program Files (x86)\WinSCP\WinSCP.com" /script="C:\Users\*******\Desktop\NestedTestScript.txt"

REM Extract & Move

REM Variables
SET DATE=%date:~10,4%_%date:~4,2%_%date:~7,2%

If exist "F:\*******\Databases\Stage\TestZipFile1\TestZipFile1.zip" (
   7z x "F:\*******\Databases\Stage\TestZipFile1\TestZipFile1.zip" -o"F:\*******\Databases\Stage\TestZipFile1\" -y
   mkdir "F:\*******\Databases\TestZipFile1\Current As Of - %DATE%"
   move "F:\*******\Databases\Stage\TestZipFile1\*.*" "F:\*******\Databases\TestZipFile1\Current As Of - %DATE%"
   goto database2
)
:database2
If exist "F:\*******\Databases\Stage\TestZipFile1\TestZipFil21.zip" (
   7z x "F:\*******\Databases\Stage\TestZipFile2\TestZipFile2.zip" -o"F:\*******\Databases\Stage\TestZipFile2\" -y
   mkdir "F:\*******\Databases\TestZipFile2\Current As Of - %DATE%"
   move "F:\*******\Databases\Stage\TestZipFile2\*.*" "F:\*******\Databases\TestZipFile2\Current As Of - %DATE%"
   goto end
)
:end

pause
Guest




After doing some more reading, I have tried to create a third batch file which first calls the WinSCP script, followed by the second batch script. Unfortunately, when using this method, the WinSCP script executes, but the second batch does not. If this is a viable solution, any help with this method would also be appreciated.

Thanks!
digitaltoast
[View user's profile]

Joined: 2014-06-08
Posts: 3
gsidhu wrote:
Hi there,
I am wondering whether it is possible to execute an external command after each file has been synchronized


Hope I'm not thread-hijacking I'd also be really interested in exactly this as I'm trying to write a very simple "click and go" DOS script for a blind person who simply needs to sync his local folder with a remote server with ftp explicit TLS, so plain old ftp is out of the question.

I know I can make the system bell go "ding" with a special character in a batch script, and I can make soundrec.exe do something similar with a short wav file.

But what I can't figure out, despite much googling, is how to let the blind user know after each file has completed, and again when the whole lot is done. Advice appreciated!
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
As I already answered on
http://winscp.net/forum/viewtopic.php?p=51229#51229
using WinSCP .NET assembly for such a task is probably easier than using a script.

Similar example is here:
http://winscp.net/eng/docs/library_example_delete_after_successful_download

Or you can leverage Session.FileTransferred event to make it more real-time, if needed:
http://winscp.net/eng/docs/library_session_filetransferred
http://winscp.net/eng/docs/library_session_synchronizedirectories#example

Anyway, regarding your 3-batch-file solution: If you are calling two batch files in a sequence from a master batch file, you need to use call command, otherwise master batch file never continues after the first child batch file completes. This is a general rule (nothing to do with WinSCP). Though I do not understand what you need 3 batch files for Smile
digitaltoast
[View user's profile]

Joined: 2014-06-08
Posts: 3
prikryl wrote:
using WinSCP .NET assembly...


Thanks for the reply. I don't know much (anything!) about programming .NET - is this a standalone self-contained .dll?

I can't test how it works without .NET installed as I don't have such a machine here, but this MUST be totally standalone, even runnable on XP (yes, I know!), without user prompting or installation of third party libraries. If it can't run from a USB on a "basic" windows, it's no good here.

Is this likely to work in this case?
martin
[View user's profile]
Site Admin
Joined: 2002-12-10
Posts: 24530
Location: Prague, Czechia
The WinSCP .NET assembly does not need anything else apart from WinSCP itself (winscp.exe) and the Microsoft .NET framework.

The .NET framework is part of Windows XP SP1:
https://en.wikipedia.org/wiki/Windows_XP#Service_Pack_1
And is included by default with Windows Vista and later:
https://en.wikipedia.org/wiki/.NET_Framework#History
_________________
Martin Prikryl
digitaltoast
[View user's profile]

Joined: 2014-06-08
Posts: 3
prikryl wrote:
The WinSCP .NET assembly does not need anything else apart from WinSCP itself [...] The .NET framework is part of Windows XP SP1:


Brilliant - perfect answer! Thanks. Sounds like that's a safe route to go then. Problem solved, for me at least. Many thanks.
Advertisements

You can post new topics in this forum






Search Site

What is WinSCP?

It is award-winning SFTP client, SCP client, FTPS client and FTP client integrated into one software program for file transfer to FTP server or secure SFTP server. [More]

And it's free!

Donate

About donations

$9   $19   $49   $99

About donations

Recommend

WinSCP Privacy Policy

WinSCP License