2010-03-15 40 views
1

我想复制从脚本开始运行和小时前有时间戳的文件。所以我基本上是在模仿robocopy,但是minage和maxage会降到正确的时间而不是几天。到目前为止,我有这个在PowerShell中:如何复制文件和时间戳之间的2倍,并保留目录结构

$now = Get-Date 
$previousHour = $now.AddHours(-1) 
"Copying files from $previousHour to $now" 

function DoCopy ($source, $destination) 
{ 
$fileList = gci $source -Recurse 
foreach ($file in $fileList) 
{ 
    if($file.LastWriteTime -lt $now -and $file.LastWriteTime -gt $previousHour) 
    { 
    #Do the copy 
    } 
} 
} 

DoCopy "C:\test" "C:\test2" 

,但如果我尝试做副本这样的,它会将所有的文件直接到目标文件夹,而不是子文件夹。 enter code here

回答

3

您必须为每个要复制的文件生成整个目标路径。最简单的方法是将源文件夹替换为目标文件夹。您可以替换您的复制命令:

copy $file $file.FullName.Replace($source, $destination) 

请注意,你可以用这一个班轮更换整个功能:以上

gci $source -recurse | ?{$_.LastWriteTime -lt $now -and $_.LastWriteTime -gt $previousHour} | %{copy $_ $_.FullName.Replace($source, $destination)} 

一些注意事项:

  • ?是where-object的别名,其中 可筛选要复制的文件。
  • %是foreach的别名。在这个 循环中,我们复制每个已过滤的 文件,将源路径名称 替换为目标。