0

我需要浏览一个包含大约 50.000 个文件夹和大约 100 万个文件的大文件夹(我们称之为 D:\Files),并复制 2012 年 8 月 31 日之后创建(未修改)的所有文件夹,包括其子文件夹中的所有内容(包括二级/三级/四级深子文件夹等)和这些文件夹中的文件(也包括子文件夹中的文件,无论何时更改),无论何时创建,只要它们位于“更高up” 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 月创建的,那么其中的文件和文件夹 - 无论是一层、二层、三层、四层等,无论何时更改/修改,都应该移动到E:\Space 与 powershell。

在过去的两天里,我试图通过,但到目前为止失败得很惨。

我知道这对于 Powershell 来说可能并不容易,因为它需要几个步骤,但任何帮助都将不胜感激。

非常感谢。

4

2 回答 2

0

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

如果您正在寻找 ps 解决方案,请查看 scriptinggames 2013 Event 1 提交

于 2013-05-16T19:48:01.290 回答
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
  }
}
于 2013-05-16T16:59:30.563 回答