如何复制时间戳介于2次之间的文件并保留目录结构

时间:2010-03-15 21:12:58

标签: powershell

我想复制从脚本开始运行到一小时之前的时间戳的文件。所以我基本上试图模仿robocopy,但是minage和maxage下降到确切的时间而不是几天。到目前为止,我在powershell中有这个:

$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

1 个答案:

答案 0 :(得分: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的别名。在这 循环我们复制每个过滤的 文件,替换源路径名称 与目的地。