Question

I'm trying to copy a specific folder w/ files from a network drive using Robocopy. The catch is, that the files I want to copy are updated often, and placed in folders with version-numbers. Would it be possible to use Robocopy to grab files from whatever folder has the highest number?

Ex: The source path looks like this: K:\program\versions\6.7.0.144\ with '144' being the number that is changed often. The path K:\Program\versions\ contains all versions, each in their own folder, like so: http://i.stack.imgur.com/zDL16.png

So, each time I run the script, I want it to get files from the latest version/highest number.

So far, my script looks like this:

robocopy \\K:\program\versions\6.7.0.*\bin\config C:\Target /e /z /A-:R

Robocopy does not accept the * in the source-path. So, is this possible with Robocopy, or do I have to use a different approach?

Was it helpful?

Solution

You cannot with robocopy alone. You have to script it a bit. Assuming you first versions are zeroed (like 6.7.001), then it is easy to get the highest version number you requested.

I provide below snippets for batch & powershell.

Batch:

set SRCPATH=K:\program\versions
for /f %%f in ('dir /b /ad /o-n %SRCPATH%') do set SRCVER=%%f & goto NEXT
:NEXT
echo # Version %SRCVER% will be used
robocopy %SRCPATH%\%SRCVER%\bin\config C:\Target /E /Z /A-:R /LOG:C:\backup.log

goto NEXT is to break for loop after first element, since we sorted by name, descending

Powershell:

$SRCPATH = "K:\program\versions"
$SRCPATH = "D:\temp"
$SRCVER = (Get-ChildItem $SRCPATH | Where-Object { $_.PsISContainer } | Sort-Object -Property Name -Descending | Select-Object -First 1).FullName
$SRCFULL= $SRCVER + '\bin\config'
echo "# Version $SRCVER will be used"
& robocopy $SRCFULL C:\Target /E /Z /A-:R /LOG:C:\backup.log

HTH

OTHER TIPS

The only thing I can suggest vis using Robocopy only is the /MAXAGE: flag.

Otherwise I'd wrap Robocopy in a Powershell Script to do the directory selection for me.

$dirlist = "k:\program\version\6.7.0.1","k:\program\version\6.7.0.144","k:\program\version\6.7.0.77"
$pattern = [regex]'.*6\.7\.0\.(\d*)'
$maxvers = 0
foreach ($dirname in $dirlist) {
    $vers = $pattern.match( $dirname ).Groups[1].Value
    if($vers -gt $maxvers) { $maxvers = $vers }
}
$robodir = "k:\program\version\6.7.0.$maxvers\bin\config"
robocopy $robodir c:\Target /e /z /A-:R
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top