搜索在日期X之后创建的文件夹并复制它们

时间:2013-05-16 14:25:06

标签: powershell copy directory subdirectory datecreated

我需要浏览一个大文件夹(我们称之为D:\ Files),其中包含大约50.000个文件夹和大约100万个文件,并复制2012年8月31日之后创建(未修改)的所有文件夹,包括所有文件夹他们的子文件夹(包括第二/第三/第四级深子文件夹等)和文件(也包括子文件夹中的文件,无论何时更改)都在这些文件夹中,无论何时创建它们,只要它们在8月以后创建的“更高”文件夹到另一个驱动器(称为E:\ Space) - 仍保留原始文件夹结构,因此之前的文件位于D:\ Files \ Folder1 \ Subfolder3 \ hello.txt中然后应该在E:\ Space \ Folder1 \ Subfolder3 \ hello.txt

背景是,8月之后在结构中创建了一些文件夹,但是其中的文件确实有较旧的修改日期,我需要在2012年8月31日之后添加到D:\ Files的搜索过程中包含所有内容,所以我无法弄清楚最近添加了哪些文件,以及8月之前已经存在哪些文件,我需要搜索文件夹创建日期。

因此,如果文件夹D:\ Files \ Folder1是在9月份创建的,那么文件和文件夹就在其中 - 无论是更改/修改过的一层,两层,三层,四层等等,都应该用powershell移动到E:\ Space。

我在过去的两天里尝试过,但到目前为止失败了。

我知道使用Powershell可能并不容易,因为它需要几个步骤,但是我们将非常感谢任何帮助。

非常感谢。

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

$srcRoot = "D:\Files"
$dstRoot = "D:\Space"

$ct = Get-Date "2012-09-01"

Get-ChildItem -Recurse $srcRoot | ? {
  $_.PSIsContainer -and $_.CreationTime -ge $ct
} | sort FullName | % {
  $name = $_.FullName
  if ($top -eq $null) {
    $top = $name
  } elseif ( $name.substring(0, [math]::Min($top.Length, $name.Length)) -ne $top ) {
    $top = $name
    $dst = $_ -replace [regex]::Escape($srcRoot), $dstRoot
    Copy-Item $name $dst -Recurse -Force
  }
}

答案 1 :(得分:0)

您应该考虑使用robocopy.exeto解决任务。

如果您正在寻找ps解决方案,请查看脚本游戏2013事件1提交