移动时保留 Get-ChildItem 中的第一层文件夹

Keep first layer of folders from Get-ChildItem when moving

我正在处理一些 PowerShell 脚本,它会自动将文件夹和文件从 'X-Drive' 文件夹移动到 'Old' 文件夹,该文件夹也位于 'X-Drive' 文件夹中,但是我想让它只保留第一层文件夹,里面的东西都可以移动但只需要保留文件夹,但它也需要在'Old'文件夹中。

$exclude = @('Keep 1', 'Keep 2')
Get-ChildItem -Path "C:\X-Drive" -Recurse -Exclude $exclude |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-0) } |
    Move-Item -Destination "C:\X-Drive\Old" -ErrorAction 'SilentlyContinue'

枚举C:\X-D_rive的子文件夹,然后将其内容移动到C:\X-Drive\old中相应的子文件夹,例如像这样:

$refdate = (Get-Date).AddDays(-1)
Get-ChildItem 'C:\X-Drive' -Directory -Exclude $exclude | ForEach-Object {
    $dst = Join-Path 'C:\X-Drive\old' $_.Name
    If (-not (Test-Path -LiteralPath $dst)) {
        New-Item -Type Directory -Path $dst | Out-Null
    }
    Get-ChildItem $_.FullName -Recurse | Where-Object {
        $_.LastWriteTime -lt $refdate
    } | Move-Item -Destination $dst
}

您可能需要将 old 添加到 $excludes,顺便说一句。

代码假定您是 运行 PowerShell v3 或更新版本。