我正在尝试仅将文件(所有文件中的旧文件)从一个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目录。
有人可以帮忙吗?
答案 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
希望有帮助。