This is exactly what I would use, its more resilient in the event of a failure which could be for numerous reasons like a temporary network issue. You can even generate the robocopy.exe calls from your SQL server like so, note the use of <> in the code to indicate what you can change. Obviously you could change your requirements in terms of locations etc.
IF OBJECT_ID('fnGetFileName') IS NOT NULL
DROP FUNCTION fnGetFileName
Create FUNCTION fnGetFileName
IF(CHARINDEX('\', @fullpath) > 0)
SELECT @fullpath = LTRIM(RTRIM(RIGHT(@fullpath, CHARINDEX('\', REVERSE(@fullpath)) -1)))
WITH CTE_metadata AS (
SELECT CASE WHEN CHARINDEX('\', [physical_name]) > 0 THEN substring(physical_name,1,charindex(reverse(substring(reverse(physical_name),1,charindex('\',reverse(physical_name)) ) ),physical_name) ) ELSE physical_name END AS SourcePath,
dbo.fnGetFileName(physical_name) AS FileName
WHERE DB_NAME(database_id) IN (<List Your DB's Here>)
SELECT 'START robocopy '
+ CASE WHEN [FileName] like '%LOG%' THEN ' \\<Destination server>\<Destination Drive>$\MSSQL\LOGS' ELSE ' \\<Destination server>\<Destination Drive>$\MSSQL\DATA' END
+' ' + LTRIM(RTRIM([FileName]))
+' /R:3 /log:?:\robocopy\log\'
+ [FileName] + '.log'
MCITP SQL 2005, MCSA SQL 2012