2016-06-16 4 views
0

Я ищу команду, которая дает мне возможность копировать файл с наибольшим количеством в имени из папки.Скопируйте файл с наибольшим количеством в filename с помощью PowerShell

Я использовал эту команду, чтобы скопировать новейший файл из папки (с некоторыми фильтрами, которые мне нужны):

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» не будут скопированы.

ответ

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:\' 
+0

Дэйв, спасибо так много ! Я даже обновляю ваш скрипт, и теперь я могу не только скопировать, но и выполнить файл с наибольшим числом в имени файла Get-ChildItem "C: \ Users \ Имя Фамилия \ Рабочий стол" -Filter * .exe | Где имя -NotMatch '. * NoDB \ .exe $' | % { Новый объект psobject -Property @ { No = [int] ([regex] :: Match ($ _. Name, '(? <= CL) \ d +'). Значение) Name = $ _. FullName } } | Сортировать по убыванию Выберите -ExpandProperty Name -First 1 | Invoke-Item Удивительно! Спасибо, Дейв! –

Смежные вопросы