Question Conserver la dernière occurence d'une liste de fic

Plus d'informations
il y a 11 ans 1 mois #18881 par JP
Bonjour à tous,

tout nouveau dans le powershell :)
j'ai donc besoin de vos lumières pour construire un script qui me permettrait de :

- lister tous les fichiers d'un répertoire sachant qu'il s'agit d'applications versionnées.
Les fichiers ont donc un nom semblable mais avec le versionning en + (exemple : fic_V2.0.9.ipa)

- ne conserver que la dernière version de chaque application (sort lastwritetime ?) ... Et donc supprimer les anciennes.

En espérant avoir été assez exhaustif dans mon explication.

Merci pour votre aide ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #18882 par Laurent Dardenne
Un tutoriel sur le sujet
Ensuite il faut analyser le numéro de version portée par le nom de fichier :
[code:1]
'test' > 'c:\temp\fic_V2.0.9.ipa'
$p=get-item 'c:\temp\fic_V2.0.9.ipa'
$p.Name
$Version=($p.BaseName -replace '^(.*)_V(\d*.\d*.\d*)','$2') -as [System.Version]
If ($version -ne $null)
{ $Version}
else
{Write-error \"Le fichier '$P' n'est pas versionné.\"}
[/code:1]
Je te laisse faire le reste.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #18883 par JP
Merci pour la reponse. Je vais essayer d'y jeter un oeil rapidement.

Pour être plus clair voici un exemple de contenu du répertoire :

[code:1]
applis1_V2.0.1.ipa
applis1_V2.0.2.ipa
applis1_V2.0.3.ipa
applis12_V1.ipa
applis12_V1.1.ipa
applis12_V1.15.ipa
applis25_V1.0.ipa
applis25_V2.ipa
[/code:1]

Je veux donc conserver

[code:1]
applis1_V2.0.3.ipa
applis12_V1.15.ipa
applis25_V2.ipa
[/code:1]<br><br>Message édité par: jenko, à: 29/01/15 14:23

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #18884 par Laurent Dardenne
jenko écrit:

Je vais essayer d'y jeter un oeil rapidement.

M'est avis qu'ici il faut mettre tous les yeux dans le même panier :lol:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #18928 par JP
Bon j'ai essayé de faire un bout de code seul.
Et je galère un peu :S

[code:1]
# creation de la liste des applis
$list_appli = New-Item -Path 'R:\TOTO\liste_appli.txt' -ItemType \&quot;file\&quot; -force
# on classe les objets par nom et par date de modif, puis on recupère le nom sans extension, on supprime 'liste_appli' du résultat.
gci 'R:\TOTO' | sort-object name, lastwritetime | % {$_.BaseName} | foreach {$_ -replace 'liste_appli', \&quot;\&quot;} | out-file $list_appli -encoding ASCII
# on purge list_appli du versionning et on supprime les doublons
gc $list_appli | %{$tableau = $_.split()[0..1] ; write-output \&quot;$($tableau[0]) $($tableau[1])\&quot;} | Select-Object –Unique | out-file 'R:\TOTO\list_appli_uniq.txt'
[/code:1]

J'ai donc maintenant une liste de mes applis, sans doublons et sans version.

A partir de ça je voulais faire une boucle du genre ... \&quot;pour toutes les applis avec le nom semblable à ma liste, ne conserver que la dernière version, sinon supprimer les autres\&quot;

Je sais pas si j'ai la bonne demarche ?
Désolé Laurent D. de ne pas avoir utiliser ton code mais pour le moment j'avance pas à pas :lol:
Ce qui est sure c'est qu'on doit pouvoir optimiser tout ça.

Un peu d'aide pour le foreach ?

Correction :

Le nom des applis est plutot de la forme

[code:1]
Appli test 1.0.1.ipa
Appli test 1.0.5.ipa
Appli titi 2.0.ipa
Appli titi 2.1.ipa
Appli toto 1.0.ipa
Appli toto 1.0.5.ipa
[/code:1]<br><br>Message édité par: jenko, à: 4/02/15 14:31

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 1 mois #18940 par Laurent Dardenne
jenko écrit:

Et je galère un peu

Ceci
jenko écrit:

tout nouveau dans le powershell

expliquant cela.

jenko écrit:

Je sais pas si j'ai la bonne demarche ?

Je n'ai pas compris ton code, ni pris le temps de le comprendre.
LastWriteTime n'est pas le bon critère, de ce que j'ai compris c'est le numéro de version.

jenko écrit:

Désolé Laurent D. de ne pas avoir utiliser ton code mais pour le moment j'avance pas à pas :lol:

Tu fais ce que tu veux.

Avec un jeux de test c'est plus facile il me semble. A toi de compléter les cas, car je ne connais pas la norme.
Première étape rechercher les fichiers dont le numéro de version est le plus élevé, c'est à dire la dernière version :
[code:1]
#Lister tous les fichiers d'un répertoire sachant qu'il s'agit d'applications versionnées.
#Les fichiers ont donc un nom semblable mais avec le versionning en + (exemple : fic_V2.0.9.ipa)
#
#Ne conserver que la dernière version de chaque application (sort lastwritetime ?) ... Et donc supprimer les anciennes.

$Temp='C:\temp\TestVersion'
md $Temp

#Jeux de test basique
$Files=@(
'Appli test 1.0.1.ipa',
'Appli test 1.0.5.ipa',
'Appli titi 2.0.ipa',
'Appli titi 2.1.ipa',
'Appli toto 1.0.ipa',
'Appli toto 1.0.5.ipa',
'Appli Riri.ipa' # normé, mais sans N° de version
'Autre.ipa' #Normé ? Extension valide, mais sans N° de version
'Test.txt' #Comme le port-salut
'Test12.txt' #?
)

#création du jeux de test
$Files|
Foreach {
\&quot;Test version $_\&quot; &gt; \&quot;$Temp\$_\&quot;
}

#recherche, parsing, groupement sur nom d'Application et enfin tri sur le n° de version s'il existe.
$LastVersionFiles=Dir \&quot;$temp\*.ipa\&quot;|
Foreach {
if ($_.BaseName -Match '^(?&lt;ApplicationName&gt;.*?)(?&lt;Version&gt;(\d*\.\d*\.\d*|\d*\.\d*))$')
{
$ApplicationName=$Matches.ApplicationName
$Version=$Matches.Version -as [System.Version]
}
else
{ $ApplicationName=$Version=$null }

Add-Member -InputObject $_ -MemberType Noteproperty -Name ApplicationName -Value $ApplicationName -Passthru|
Add-Member -MemberType Noteproperty -Name Version -Value $Version -Passthru
}|
Where {$_.ApplicationName -ne $null}| #todo warning/Erreur sur ceux $null ?
Group-Object ApplicationName|
Foreach {
($_.Group|Sort-Object Version -Descending)[0]
}

$LastVersionFiles
# Appli test 1.0.5.ipa
# Appli titi 2.1.ipa
# Appli toto 1.0.5.ipa

#Reste à faire : on détruit tout sauf ces fichiers
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.049 secondes
Propulsé par Kunena