Robocopy: копирование файлов из переменного источника

Я пытаюсь скопировать определенную папку с файлами с сетевого диска с помощью Robocopy. Загвоздка в том, что файлы, которые я хочу скопировать, часто обновляются и помещаются в папки с номерами версий. Можно ли использовать Robocopy для извлечения файлов из любой папки с наибольшим номером?

Пример: исходный путь выглядит так: K: \ program \ versions \ 6.7.0.144 \, где «144» - это число, которое часто меняется. Путь K: \ Program \ versions \ содержит все версии, каждая в своей папке, например: http://i.stack.imgur.com/zDL16.png

Итак, каждый раз, когда я запускаю скрипт, я хочу, чтобы он получал файлы с последней версией / самым большим номером.

Пока мой сценарий выглядит так:

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

Robocopy не принимает * в исходном пути. Итак, возможно ли это с помощью Robocopy, или мне нужно использовать другой подход?


person user3402102    schedule 10.03.2014    source источник
comment
Я предполагаю, что двойная обратная косая черта - это опечатка в команде?   -  person Mat M    schedule 21.04.2014
comment
\\ K: - это имя сетевого диска.   -  person user3402102    schedule 22.04.2014


Ответы (2)


Вы не можете использовать только robocopy. Вы должны немного написать сценарий. Предполагая, что ваши первые версии обнулены (например, 6.7.001), тогда легко получить самый высокий номер версии, который вы запрашивали.

Я предоставляю ниже фрагменты для пакетной обработки и PowerShell.

Партия:

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 - это прервать цикл после первого элемента, так как мы отсортировали по имени, по убыванию

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

person Mat M    schedule 21.04.2014

Единственное, что я могу предложить vis, использующим только Robocopy, - это флаг / MAXAGE :.

В противном случае я бы обернул Robocopy в сценарий Powershell, чтобы выбрать каталог за меня.

$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
person Arluin    schedule 10.03.2014