Question récuperer les fichiers les plus récents

Plus d'informations
il y a 13 ans 10 mois #11648 par Thierry S.
Bonjour à tous,

Voilà mon probleme :
récupere LE fichier le plus récent, je sais faire (avec -last)
mais plusieurs fichiers en meme temps, sic :(



je dois retrouver une 10zène de fichiers dans un répertoire qui en compte plus de 30 000:blink:

dans mon tout 1er post ici, sur ce forum (cf : ICI ) je devais récuperer les versions de fichiers (c'est l'extention du fichier qui détermine sa version, et elle est aléatoire pour moi) :

NJ_ETAT.*,
NJA_C.*,
K2U_ONC.*,
X01_R.*
dont la date n'excède pas XxX heures et dont le poids ne dépasse pas 2 mo.


Cette partie de script permettait la manoeuvre :

[code:1]$hour = \"+12\" (depuis la valeur est a passer dans read-host)
$mydata = \"c:\PATHSOURCE\"
$jour = get-date
$lastmod = $jour.Addhours(-$hour)
$Files = Get-ChildItem $mydata -include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,
X01_R.* -recurse |Where {$_.LastWriteTime -gt \"$lastmod\"} |Where {$_.length -lt 2000000}
#
foreach ($File in $Files)
{
write-host \"Fichier \" -nonewline; write-host \"$File\" -foregroundcolor \"green\";
}[/code:1]

Les fichiers récupérés passent dans une moulinette pour être imprimés automatiquement.


Le soucis est qu'il arrive que deux fichiers identiques (de version différente) soit générés dans la meme heure...
donc meme en réduisant a la valeur $hour à \"+1\", je me retrouve avec deux fichiers de moins d'une heure, alors qu'il ne me faut que le tout dernier


j'ai bien essayé :[code:1]
$Files = Get-ChildItem $mydata -include NJ_ETAT.*,NJA_C.*,K2U_ONC.*,
X01_R.* -recurse |Where {$_.LastWriteTime -gt \"$lastmod\"} |Where {$_.length -lt 2000000}

| sort LastWriteTime -desc | select -first 1[/code:1]

mais seul le dernier fichier (le plus récent) remonte :(
en résumé,
j'aimerais récuperer la plus récente version de chaque fichier
:

NJ_ETAT.*,
NJA_C.*,
K2U_ONC.*,
X01_R.*


Merci par avance de votre aide ...<br><br>Message édité par: Thierry94, à: 25/04/12 15:19

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

Plus d'informations
il y a 13 ans 10 mois #11653 par Laurent Dardenne
Thierry94 écrit:

mais seul le dernier fichier (le plus récent) remonte :(
en résumé,
j'aimerais récuperer la plus récente version de chaque fichier
:

Je n'ai pas suivi le post que tu cites, mais je verrai bien l'usage d'un pipe(boucle) imbriqué.

Tutoriels PowerShell

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

Plus d'informations
il y a 13 ans 10 mois #11654 par Thierry S.
Laurent Dardenne écrit:

Thierry94 écrit:

mais seul le dernier fichier (le plus récent) remonte :(
en résumé,
j'aimerais récuperer la plus récente version de chaque fichier
:

Je n'ai pas suivi le post que tu cites, mais je verrai bien l'usage d'un pipe(boucle) imbriqué.


Bonsoir &amp; Merci pour l'interet que tu portes a mon prb.

En clair (oui désolé, je m'exprime peut-etre mal)

par exemple :

Dans un dossier X de 30000 fichiers (ou plusieurs fichiers portent le meme nom et où seul l'extension permet de les différencier)

j'ai souhaité récupérer les fichiers commençant par toto*,tata*,titi* de - de 2mo

ça donne comme syntaxe :

$lastmod = $jour.Addhours(-$hour)
($hour est égal à 1heure --&gt; \&quot;+1\&quot;)

$Files = Get-ChildItem $mydata -include Toto.*,Titi.*,Tata.* -recurse
|Where {$_.LastWriteTime -gt \&quot;$lastmod\&quot;} |Where {$_.length -lt 2000000}

je récupere :

Toto.111 25-04-2012 11h20
Tata.123 25-04-2012 11h20
Titi.456 25-04-2012 11h20
Toto.142 25-04-2012 11h28


Celui en rouge (Toto.111) pose probleme car la version du fichier la plus récente est celle portant l'extension .142 (de 11h28)

donc dans un dossier contenant des fichiers portant le meme \&quot;radical\&quot; et où seul l'extention permet de les reconnaitre (et l'heure de création biensur), il me faut le plus récent (le tout dernier et nuiquement lui ) de chaque \&quot;radical\&quot;...
:)<br><br>Message édité par: Thierry94, à: 25/04/12 23:28

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

Plus d'informations
il y a 13 ans 10 mois #11657 par Thierry S.
bon résolu mon probleme :


en faisant ça !:

[code:1]Get-ChildItem \&quot;$mydata\*\&quot; -EA SilentlyContinue -include toto.* |Where {$_.LastWriteTime -gt \&quot;$lastmod\&quot;} |Where {$_.length -lt 2000000} | sort LastWriteTime -desc | select -first 1 | Copy-Item -Destination $pathcopyAF
Get-ChildItem \&quot;$mydata\*\&quot; -EA SilentlyContinue -include tata.* |Where {$_.LastWriteTime -gt \&quot;$lastmod\&quot;} |Where {$_.length -lt 2000000} | sort LastWriteTime -desc | select -first 1 | Copy-Item -Destination $pathcopyAF
#
$FilesAF = Get-ChildItem \&quot;$pathcopyAF\*\&quot;
If ($FilesAf -eq $Null)
{[/code:1]

j'ai séparé chaque recherche de fichier....
Si quelqu'un a mieux, j'suis preneur...

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

Plus d'informations
il y a 13 ans 10 mois #11658 par Thierry S.
Doublon...<br><br>Message édité par: Thierry94, à: 26/04/12 13:40

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

Plus d'informations
il y a 13 ans 10 mois #11662 par Laurent Dardenne
Thierry94 écrit:

Si quelqu'un a mieux, j'suis preneur...

Dans ce cas il faut fournir un jeux de test, ou un script de génération d'un jeux de test.
A mon avis, bien que ce soit une solution et qu'on peut s'en contenter, l'approche du copier /coller est à bannir. Sa seule fonction est de nous transformer en perroquet :whistle:
co co ...

Tutoriels PowerShell

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

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