我正在寻找能够从文件夹中复制名称中号码最大的文件的命令。
我使用此命令从文件夹中复制最新文件(包含一些我需要的过滤器):
Get-ChildItem "B:\" -Filter '*.exe' | Where Name -NotMatch '.*NoDB\.exe$' | Sort LastWriteTime -Descending | Select -First 1 | Copy-Item -Destination 'D:\'
这是我的文件夹结构:
Release_OSInstaller_2015_CL287638x64_NoDB.exe
Release_OSInstaller_2015_CL287638x64.exe
Release_OSInstaller_2015_CL287337x64_NoDB.exe
Release_OSInstaller_2015_CL287337x64.exe
所以我需要复制Release_OSInstaller_2015_CL287638x64.exe,因为该文件的名称包含最大数字287638.此外,我需要确保不会复制带有“NoDB.exe”参数的文件。
答案 0 :(得分:1)
如果在脚本中创建PSObject,则可以对数字进行排序。
以下示例使用正则表达式获取数字,并假设该数字以CL为前缀(如果不是,则需要修改正则表达式):
Get-ChildItem -Filter *.exe | Where Name -NotMatch '.*NoDB\.exe$' | % {
New-Object psobject -Property @{
No = [int]([regex]::Match($_.Name, '(?<=CL)\d+').Value)
Name = $_.FullName
}
} | Sort No -Descending | Select -ExpandProperty Name -First 1 | Copy-Item -Destination 'D:\'