删除每个子目录中除最新的模式文件外的所有文件
Delete All But The Newest File of Pattern In Each Subdirectory
要求:
- 遍历每个目录中的所有文件夹和文件
删除每个子目录中的所有文件,除了最新的文件(包含文件名时间戳)并具有特定的文件名模式,或者复制每个子目录中最新的文件和前面的文件LIVE_DATA。 (我希望忽略每个子目录中的其他文件)。
- 目录: AISI-301.0000000001006165.2015-08-24_23-57-46-1
- 文件: LIVE_DATA_2015-08-24_23-57-51.413+0000.MCA
如何在仅比较每个子目录中的文件时递归地遍历所有文件?我不想将所有这些放在一起比较。只是每个子目录中的一个。
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}
如果您想删除所有文件 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_*
)。
代码基本上列出所有文件夹,然后处理每个单独文件夹的文件。
要求:
- 遍历每个目录中的所有文件夹和文件
删除每个子目录中的所有文件,除了最新的文件(包含文件名时间戳)并具有特定的文件名模式,或者复制每个子目录中最新的文件和前面的文件LIVE_DATA。 (我希望忽略每个子目录中的其他文件)。
- 目录: AISI-301.0000000001006165.2015-08-24_23-57-46-1
- 文件: LIVE_DATA_2015-08-24_23-57-51.413+0000.MCA
如何在仅比较每个子目录中的文件时递归地遍历所有文件?我不想将所有这些放在一起比较。只是每个子目录中的一个。
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}
如果您想删除所有文件 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_*
)。
代码基本上列出所有文件夹,然后处理每个单独文件夹的文件。