2015-05-29 4 views
0

У меня есть эта папка в каталоге. С другой версией на них.Сортировка файлов с номером версии в Powershell

CD1,CD2,CD3,CD4,CD5,CD6,CD7,CD8,CD9,CD11,CD12 

Я новичок в powershell, может ли кто-нибудь помочь мне получить последнюю версию папки из вышеуказанных папок? Здесь CD12 является последней папкой. Я не могу использовать последнее измененное время, потому что я копирую их одновременно.

$FolderName=(Get-ChildItem C:\Current\CD |Where-Object {$_.name -like "*CD*"}| sort{$_.name.Substring(2,2)}|Select-Object Name -Last 1).Name) 
Write-Host "$FolderName" 

Я пробовал вышеуказанный скрипт, и это не помогло. Может кто-нибудь мне помочь? Следующая новая версия CD13, и скрипт должен получить эту папку

+0

Когда вы говорите «получите последнюю версию», вы имеете в виду подпапку с наивысшим номером или ту, которая имеет самую последнюю модификацию, или некоторые другие критерии? –

+0

Да, папка с наивысшим номером, в данном случае ее «CD12». – user3566201

ответ

0

Вы можете попробовать что-то вроде ниже

$max_version = Get-ChildItem "C:\Current\" | Where-Object {$_.PSIsContainer} 
| Foreach-Object {$_.Name} | Foreach-object {$_ -replace "CD", ""} 
| measure -maximum | Select-Object -expand Maximum 

Write-host ("CD" + $max_version) 

что приведет к CD12

0

Вы почти есть. Когда я попытался запустить ваш код, я столкнулся с двумя ошибками. Во-первых, у вас есть дополнительный «)» в конце строки, вызывающий синтаксическую ошибку. Во-вторых, ваш вызов «SubString()» терпит неудачу, потому что вы пытаетесь получить 3-й и 4-й символы строки без 4-го символа («CD1»). Однако вам не нужен скриптовый блок для вашей команды Sort. Вы можете просто отсортировать поле Имя.

$FolderName = Get-ChildItem C:\7005\Hot-Fix\CD | where Name -like "CD*" | sort Name | Select-Object -Last 1 -ExpandProperty Name 

В качестве примечания, это используется синтаксис PowerShell 3 для Where-Object и Sort-Object опустить {}. И он использует параметр -ExpandProperty для Select-Object, поэтому вам не нужно обертывать все это в parens, чтобы получить свойство Name.

0

Вы можете попробовать это:

#requires -v 3 
$baseFolder='C:\7005\Hot-Fix\CD' 
$folder=dir $baseFolder\CD* -Directory | 
    ? basename -CMatch 'CD\d{1,}' | 
    sort @{e={'{0:0000}' -f [int]($_ -replace '\D')}} -Descending | 
    select -First 1 

Заметьте, я рассматриваю случай чувствительного соответствие; также, $folder содержит то, что вы ищете.

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