要求:
删除每个子目录中除最新文件(包含文件名时间戳)以外的所有文件,并且具有特定的文件名模式,或者在每个最新的子目录中复制一个文件,并以LIVE_DATA开头。 (我希望忽略每个子目录中的其他文件。)
如何仅在每个子目录中的文件之间进行比较时递归遍历所有文件?我不想将它们全部进行比较。只是每个子目录中的一个。
for $filename in Get-ChildItem -recurse {
for $filename in $directory {
if ($filename > $filename2) {
$temp = $filename
}
$filename2 = $filename1
}
}
这是我最终用来在目录名后重命名我的文件。它将文件名附加到末尾,目录名称首先出现。我希望这有助于其他可能正在寻找此解决方案的人。
Get-ChildItem -include *LIVE_DATA_*.MCA -recurse | Rename-Item -NewName { $_.Directory.Name+'_'+$_.Name}
答案 0 :(得分:3)
如果您要删除除每个文件夹最新文件之外的所有文件LIVE_DATA_*
,您可以执行以下操作:
$root = 'C:\path\to\root\folder'
Get-ChildItem $root -Recurse | ? { $_.PSIsContainer } | ForEach-Object {
Get-ChildItem (Join-Path $_.FullName 'LIVE_DATA_*') |
Sort-Object Name -Desc |
Select-Object -Skip 1 |
Remove-Item -Force
}
Get-ChildItem $root -Recurse | ? { $_.PSIsContainer }
列出$root
的所有子文件夹。然后ForEach-Object
分别为每个子文件夹运行另一个Get-ChildItem
语句(不递归)。 Join-Path
语句从文件名模式和文件夹的完整路径(C:\path\to\root\folder\sub\folder\LIVE_DATA_*
)构建通配符路径。
基本上,代码列出了所有文件夹,然后处理每个文件夹的文件。