Question Script qui filtre sur un dossier

Plus d'informations
il y a 9 ans 3 mois #22734 par Damien
Bonjour je souhaite réalisé un script qui permet dans une partition donnée, de filtrer tous les dossiers ou il y a 'photo' dedans supérieur à 100 méga.
Puis ensuite sortir cette information dans un fichier avec les info suivant l'endroit ou se trouve le dossier puis sa taille exact.

Alors je mi suis essayer. Pour filtrer ou il y a le nom photo dans un dossier ou sous dossier, c'est pas un problème, par contre le reste je n'y arrive pas ...

Voici mon essai de code :

[code:1]
#Si on veut voir sur une autre partition alors il faut changer la variable $dossierdebase

$dossierdebase = \"C:\\"

$Pathfile = \"c:\test.txt\"

$Total = 0

#Commande qui va filtrer sur le nom de fichier se nomment Photo dans dossier et sous-dossier

$fichier = Get-ChildItem -Path $dossierdebase -name *photo* -Recurse -Exclude *.png,*.dll,*.potx,*.mui,.*.xls,*.mum,*.wav,*.ttf,*.cdf,*.cat | foreach-object { $Total += $_.length }

Clear-Content -path $Pathfile -ErrorAction SilentlyContinue #continue son chemin et bypass l'erreur

$Total /= (1024*1024)

write-host \"$Total Mo\"

$fichier | Out-File $Pathfile[/code:1]

En fait je pense qu'il faudrait faire un foreach qui pour chaque dossier ou il y photo dedans et bien on compte tous les fichier dedans. Puis après on fait un tri sur la taille du dossier que l'on a obtenu dans le foreach.

Bref je n'arrive pas à l'exprimer dans le code ...

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

Plus d'informations
il y a 9 ans 3 mois #22754 par Philippe
salut DrMacabre

En fait je pense qu'il faudrait faire un foreach qui pour chaque dossier ou il y photo dedans et bien on compte tous les fichier dedans. Puis après on fait un tri sur la taille du dossier que l'on a obtenu dans le foreach.

Bref je n'arrive pas à l'exprimer dans le code ...

un truc comme ça :
[code:1]
$dossierdebase = \"C:\\"

$Pathfile = \"c:\test.txt\"

$fichiers = Get-ChildItem -File -Path $dossierdebase -Recurse -Exclude *.png,*.dll,*.potx,*.mui,.*.xls,*.mum,*.wav,*.ttf,*.cdf,*.cat | where {$_.Length -ge 100000000}

$fichiers | Group-Object DirectoryName | foreach {
$total = 0
$_.group | foreach {$total += $_.length}
\"$total $($_.Name)\"
} | Out-File $Pathfile
[/code:1]

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

Plus d'informations
il y a 9 ans 3 mois #22756 par Damien
Réponse de Damien sur le sujet Re:Script qui filtre sur un dossier
Salut et merci,

Ton script est très intéressent, mais il est trop générale il faudrait filtrer juste pour les dossiers se nomment ou comportant le nom *photo*.
Et du cou avec le -File sa fonctionne pas ...

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

Plus d'informations
il y a 9 ans 3 mois #22758 par Philippe
tu peut adapter le Get-ChildItem en fonction de tes besoins, j'avais fais la modif pour faire un test parce que je n'est pas de fichier nommé photo

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

Plus d'informations
il y a 9 ans 3 mois #22759 par Damien
Réponse de Damien sur le sujet Re:Script qui filtre sur un dossier
Justement c'est pas un fichier mais un Dossier

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

Plus d'informations
il y a 9 ans 3 mois #22772 par Philippe

Justement c'est pas un fichier mais un Dossier

même réponse

par contre pour ne ciblé que les dossiers contenant photo dans le nom, il faut faire un filtre séparé de get-childitem qui ne peut pas faire ce genre de filtre

donc deux filtrage donc :
- dans get-childitem un filtre sur le type (extension) des fichiers jpg, bmp, png
soit en faisant une exclusion des extensions comme tu a fais
soit en faisant une inclusions des extensions de type photos (pour moi qui semble plus censé )
[code:1]# soit ça :
$fichiers = Get-ChildItem -Path $dossierdebase -Recurse -Exclude *.png,*.dll,*.potx,*.mui,*.xls,*.mum,*.wav,*.ttf,*.cdf,*.cat
# soit ça
$fichiers = Get-ChildItem -Path $dossierdebase -Recurse -Include *.jpg,*.png,*.tif,*.bmp[/code:1]
- après on filtre le résultat sur la taille et sur le nom du dossier
[code:1] | where {$_.Length -ge 100000000} | where {$_.DirectoryName -like \"*photos*\"}[/code:1]

au final ton script resemble à ça :
[code:1]$dossierdebase = \"C:\\"

$Pathfile = \"c:\test.txt\"

$fichiers = Get-ChildItem -Path $dossierdebase -Recurse -Exclude *.png,*.dll,*.potx,*.mui,*.xls,*.mum,*.wav,*.ttf,*.cdf,*.cat | where {$_.Length -ge 100000000} | where {$_.DirectoryName -like \"*photos*\"}

$fichiers | Group-Object DirectoryName | foreach {
$total = 0
$_.group | foreach {$total += $_.length}
\"$total $($_.Name)\"
} | Out-File $Pathfile

[/code:1]
attention le script prend tout les dossiers dont le nom contient photo mais aussi les sous dossiers !!
.

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

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