Мой ответ - это комбинация ответов мистера Уоткинса и Эрика Николсона. В своем вопросе вы уточняете, что на самом деле вы хотите скопировать каталоги, в которые были добавлены новые файлы или скопированы существующие файлы. Поведение даты последней модификации для содержащей директории будет отличаться в разных файловых системах:
- NTFS: в файловой системе NTFS дата изменения папки изменяется, если содержимое папки изменяется.
- FAT: в файловой системе FAT дата изменения папки не изменяется при изменении содержимого папки.
Описание меток даты и времени NTFS для файлов и папок
Поэтому в идеале мы должны сначала проверить тип файловой системы исходного каталога, прежде чем принять решение о том, как определить, какие каталоги копировать:
function Copy-ModifiedSubdirectory {
param ($sourcefolder, $destinationfolder, [DateTime] $modifieddate)
# Escaping source folder for use in wmi query
$escapedsourcefolder = $sourcefolder -replace "\\","\\"
# Determine what filesystem our folder is on
$FSName = (get-wmiobject -query "select FSName from CIM_Directory where name = '$escapedsourcefolder'").FSName
if ($FSName -eq "NTFS") # The Eric Nicholson way
{
$FoldersToCopy = get-childitem $sourcefolder | where {$_.PSIsContainer} | where {$_.LastWriteTime -ge $modifieddate}
}
elseif ($FSName -eq "FAT32") # The MrKWatkins way
{
$FoldersToCopy = get-childitem $sourcefolder | where {$_.PSIsContainer} | ? { Get-ChildItem $($_.fullname) -Recurse | ? { $_.LastWriteTime -ge $modifieddate } }
}
else
{
Write-Error "Unable to Copy: File System of $sourcefolder is unknown"
}
# Actual copy
$FoldersToCopy | % { copy $_.FullName $destinationfolder -Recurse -Force}
}
Для использования функции:
$sevendaysago = ((get-date).adddays(-7))
copy-modifiedsubdirectory X:\EmpInfo Y:\Archive $sevendaysago