我正在尝试使用Robocopy从网络驱动器复制带有文件的特定文件夹。 问题是,我想要复制的文件经常更新,并放在带有版本号的文件夹中。是否可以使用Robocopy从具有最高编号的文件夹中获取文件?
Ex:源路径如下所示: K:\程序\版本\ 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是否可以实现这一点,还是必须采用不同的方法?
答案 0 :(得分:0)
我唯一能建议使用Robocopy的是/ MAXAGE:标志。
否则我会在一个Powershell脚本中包装Robocopy来为我做目录选择。
$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
答案 1 :(得分:0)
你不能单独使用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
是在第一个元素后断开for循环,因为我们按名称排序,降序
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