Powershell无法仅将文件从一个目录移动到另一个目录?

时间:2019-10-12 08:35:50

标签: powershell

我正在尝试仅将文件(所有文件中的旧文件)从一个source_dir移动到另一个archiv_dir。 source_dir包含一个子文件夹,我希望将其保留在该文件夹中,并且仅希望移动文件。

我正在过滤最新文件,并将旧文件移至存档。 下面是文件夹的结构和代码

insert()

powershell

#Source Dir

Log_Sub1  #child dir

Log1.log
Log2.log
Log3.log
Log4.log
Log5.log

预期:

仅已过滤(旧)的文件应移至存档目录。在这里,iam保留了3个最新文件,子目录应保留在相同的源目录中

实际:

Child-dir(Log_Sub1)也随旧文件一起移至arch目录。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

尽管我不太确定要对子目录中的文件执行什么操作,但我想想 您只是想在源目录中保持该目录不变。

在这种情况下,以下功能应为您工作。我已更改其名称以符合PowerShell中的Verb-Noun命名约定。

function Move-LogFiles {
    [CmdletBinding()]
    Param(
        [ValidateScript({Test-Path -Path $_ -PathType Container})]
        [string]$Source        = "D:\Log_Test_Directories\Log2", 
        [string]$Destination   = "D:\Log_Test_Directories\Log2_archiv",
        [int]$FilesToKeep      = 3
    )
    Write-Verbose "Count of keep files: $FilesToKeep"

    # Check and create Archive dir if not exist
    if (!(Test-Path -Path $Destination -PathType Container)) {
        New-Item -Path $Destination -ItemType Directory | Out-Null
    }

    $files= Get-ChildItem -Path $Source -Filter '*.log' -File | Sort-Object LastWriteTime -Descending

    if ($files.Count -gt $FilesToKeep) {
        for ($i = $FilesToKeep; $i -lt $files.Count; $i++) {
            Write-Verbose "Moving file $($files[$i].Name) to '$Destination'"
            $files[$i] | Move-Item -Destination $Destination -Force
        }
    } 
    else {
        Write-Verbose "OK! Existing files are equal/lesser to the number required latest files!"

    }
}

#Calling function
Move-LogFiles -FilesToKeep 3 -Verbose

希望有帮助。