This tip from one of our software developers shows you how to set up a way to drag and drop SFTP transfers to a folder on a remote machine using VCP (a command-line file transfer utility included with VShell® server and SecureCRT®), VBScript, and a desktop shortcut.
If you're like me, you need to upload files to the same folder on the remote machine many times throughout the day. If you're taking advantage of the VCP command-line SFTP utility for secure file transfers, it's often inconvenient to bring up a command prompt and type in the command and the full path to the folder or files you want to transfer each time you need to upload.
Ever wish you could securely upload a file to a remote server by simply dragging and dropping right from Windows Explorer? You can by combining VCP, VBScript, and a desktop shortcut to allow drag and drop SFTP transfers to a folder on a remote machine.
These are the steps to take:
Once you have successfully completed Steps 1 and 2, you should be able to drag and drop both files and folders from Explorer onto the Desktop shortcut and the selected files and folders will be uploaded to the specified folder on the remote machine indicated within the script.
For SecureFX® users, this can also be done with Sfxcl.exe, the command-line SFTP utility. Here is a link to VBScript code that uses SFXCL: SFXCL VBSCript code
Save the following VBScript code to a .vbs file on your machine. Edit the file and modify the following variables:
g_szRemoteUserMachine: your username g_szRemoteDestination: destination folder on remote machine g_szIdentityFile: identity file to use when connecting
'~~~~~~~~~~~~~~~~~~~~ Begin DragAndDropVCP.vbs ~~~~~~~~~~~~~~~~~~~~~~~~~~
' This script demonstrates how to use drag and drop to transfer ' files to a pre-determined directory on a pre-determined remote ' machine using the Vcp.exe command-line utility that is ' included with VShell server and SecureCRT. ' ' Running this script without any arguments will present ' a dialog explaining setup and usage information.
Dim g_vArgs, g_fso, g_shell Set g_vArgs = WScript.Arguments Set g_fso = CreateObject("Scripting.FileSystemObject") Set g_shell = CreateObject("WScript.Shell")
Dim g_szVcpExePath, g_szRemoteUserMachine, g_szRemoteDestination, g_szIdentityFile
' Modify this username@machine to reflect your username and the remote machine g_szRemoteUserMachine = "jdev@blacktail"
' Modify this to reflect the path to the destination folder on the remote ' machine g_szRemoteDestination = "Temp:\VCP Testing"
' Modify this private key path to match your own. For the sake of ' this script, we have created a special private key that is not ' protected by a passphrase. This setup would not be recommended ' if you are not the only one with exclusive access to your machine. g_szIdentityFile = "C:\Temp\identity"
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub Main()
' Get the path to VCP.exe from the registry. Dim szReg szReg = "HKLM\Software\VanDyke\SecureCRT\Install\Main Directory" g_szVcpExePath = g_shell.RegRead(szReg) & "\vcp.exe"
If g_vArgs.Count < 1 Then ShowUsage Exit Sub End If
' used for parameters that are not valid files/folders Redim vUnknown(g_vArgs.Count)
Dim nIndex, szFileList, nValidFilesAndFoldersCount Dim szCurrentFileOrFolder, nUnknownCount
nUnknownCount = 0 nValidFilesAndFoldersCount = 0 For nIndex = 0 To g_vArgs.Count - 1 ' We could also probably check to make sure that we have access ' to the files, but we're just going to live with access denied ' errors. szCurrentFileOrFolder = g_vArgs(nIndex) If g_fso.FileExists(szCurrentFileOrFolder) Or _ g_fso.FolderExists(szCurrentFileOrFolder) Then vFilenames(nIndex) = szCurrentFileOrFolder szFileList = szFileList & vFilenames(nIndex) & vbCrlf nValidFilesAndFoldersCount = nValidFilesAndFoldersCount + 1
Else vUnknown(nUnknownCount) = szCurrentFileOrFolder nUnknownCount = nUnknownCount + 1 End If Next
' For visual confirmation that drag and drop is working ' correctly, uncomment the following lines to display a ' message box with the arguments to this script and then ' exit... 'MsgBox szFileList 'Exit Sub
If nUnknownCount > 0 Then ' We don't ever expect this to happen, but just in case... Dim szUnknownList For nIndex = 0 To nUnknownCount - 1 szUnknownList = szUnknownList & vUnknown(nIndex) & vbCrlf Next MsgBox "These parameters were files or folders" & vbcrlf & _ "that did not exist:" & vbCrlf & vbCrlf & szUnknownList End If
' Now upload each valid file or folder to the remote machine Dim szVCPCommand, szVCPArgs, nResult
szVCPArgs = " -v -i " & chr(34) & g_szIdentityFile & chr(34) For nIndex = 0 To nValidFilesAndFoldersCount - 1 If g_fso.FolderExists(vFilenames(nIndex)) Then ' If the item is a folder, we'll need to supply the " -r " ' cmd line arg to VCP szVCPArgs = szVCPArgs & " -r " Else ' ... it must be a file that we are uploading szVCPArgs = szVCPArgs & " " End If
' Now let's build up our command line. We use chr(34) (") to work ' around possible spaces in our VCP.exe and remote paths. szVCPCommand = chr(34) & g_szVcpExePath & chr(34) & _ szVCPArgs & " " & _ chr(34) & vFilenames(nIndex) & chr(34) & " " & _ g_szRemoteUserMachine & ":" & chr(34) & _ g_szRemoteDestination & chr(34)
' To take a sneak peek at the command line, uncomment the 2 lines ' below: 'If Not Continue("Upload using the following command?" & _ ' vbCrlf & chr(9) & szVCPCommand) Then Exit Sub
' Now run the actual VCP command... ' The number 7 below is used to launch VCP in a minimized cmd window. ' If you want the window to be hidden, use 0 (Zero) as the argument ' in place of 7. ' "True" instructs the scripting engine to wait until VCP is complete ' before continuing. If you would like to transfer all files in ' parallel, replace the True with False below. nResult = g_shell.Run(szVCPCommand, 7, False) If nResult <> 0 Then MsgBox "Failed to upload using the following command: " & _ vbCrlf & chr(9) & szVCPCommand & vbCrlf & vbCrlf & _ "Error code: " & nResult End If
' Reset the command and args szVCPArgs = "" szVCPCommand = "" Next End Sub '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Private Sub ShowUsage() MsgBox "UploadToRemote Usage:" & chr(13) & chr(13) & _ "1. Create a Desktop shortcut to this .vbs file." & vbCrlf & _ "If the .vbs extension is not set to run wscript.exe" & vbcrlf & _ "automatically on your system, create a shortcut with" & vbcrlf & _ "the path set to: " & vbCrlf & _ chr(9) & "<path to wscript.exe> <path to this .vbs file>" & _ vbCrlf & vbCrlf & _ "You may also want to create a shortcut in your" & vbcrlf & _ """Send To"" folder allowing you to right-click" & vbcrlf & _ "on selected files from within Explorer and" & vbcrlf & _ "Send To -> (Machine Name)" & vbcrlf & vbcrlf & _ "2. Use SecureCRT's Key Generation Wizard to create a" & vbcrlf & _ "private key file that has an empty passphrase and" & vbcrlf & _ "upload the corresponding public key to the SSH" & vbcrlf & _ "server. This will allow you to connect and" & vbcrlf & _ "authenticate with the remote SSH server without" & vbcrlf & _ "having to input a passphrase or a password. Note" & vbcrlf & _ "that you could also supply these using the " & vbcrlf & _ "'-p <passphrase>' and '-pw <password>' command" & vbcrlf & _ "line options and you will need to modify the szVCPArgs" & vbcrlf & _ "variable in this script to add these options and" & vbcrlf & _ "values." & _ vbcrlf & vbcrlf & _ "3. Drag and drop files or folders from Explorer onto" & vbcrlf & _ "the Desktop shortcut for this .vbs file" End Sub
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Function Continue(szMsg) Continue = True If msgBox(szMsg, vbYesno) <> vbYes Then Continue = False
'~~~~~~~~~~~~~~~~~~~~~~~~ End DragAndDropVCP.vbs ~~~~~~~~~~~~~~~~~~~~~~~~~~
Here you can control cookies using the checkboxes below. Some cookies are essential for the use of our website and cannot be disabled. Others provide a convenience to the user and, if disabled, may reduce the ease of use of our site. Finally, some cookies provide anonymous analytic tracking data that help us provide the user with a richer browsing experience. You can elect to disable these cookies as well.