我在这里(在这个网站上)找到一个代码,它允许复制过去 20 天内更改的文件。我的问题是,我有一个包含许多子文件夹的文件夹,一些子文件夹可能有 8 级或更多层级。我需要将更改的文件复制到目标文件夹并维护文件夹结构。如何更改它以允许递归复制文件并维护相同的文件夹结构。以下是代码:
$DestinationFolder = "c:\temp1\"
$EarliestModifiedTime = (Get-date).AddDays(-20)
$Files = Get-ChildItem "c:\temp\*.*"
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime)
{
Copy-Item $File -Destination $DestinationFolder
Write-Host "Copying $File"
}
else
{
Write-Host "Not copying $File"
}
}
答案1
我认为这应该可以满足您的需求。利用Get-ChildItem -Recurse
并保留以下文件夹结构$RelativePath
:
$SourceFolder = "c:\temp\"
$DestinationFolder = "c:\temp1\"
$EarliestModifiedTime = (Get-Date).AddDays(-20)
$Files = Get-ChildItem $SourceFolder -Recurse -File
foreach ($File in $Files) {
if ($File.LastWriteTime -gt $EarliestModifiedTime) {
$RelativePath = $File.FullName.Substring($SourceFolder.Length)
$DestinationPath = Join-Path $DestinationFolder $RelativePath
if (!(Test-Path -Path (Split-Path $DestinationPath))) {
New-Item -ItemType Directory -Path (Split-Path $DestinationPath) -Force
}
Copy-Item $File.FullName -Destination $DestinationPath -Force
Write-Host "Copying $File"
}
else {
Write-Host "Not copying $File"
}
}
但是正如@harrymc 所说,如果您可以使用robocopy
或类似的东西,它可能会简单得多。
你可以试试:
robocopy /S /maxage:20 "c:\temp" "c:\temp1"
答案2
当 Windows 中存在更好的工具时,不要尝试自己构建工具。
看看 机器人复制 Windows 自带的工具,它有很多选项和操作模式。
还有很多免费的第三方工具可以在 Robocopy 替代方案页面。