Question [résolu] foreach

Plus d'informations
il y a 12 ans 3 mois #16642 par ZOKI
[résolu] foreach a été créé par ZOKI
bonjour à tous.

j'essaie de me lancer des défis pour mesurer mes progrès. (pas terribles pour le moment :blush:)
je bute sur cet exercice personnel.

voilà j'ai trouvé ce code qui m'a paru intéressant

[code:1]
$i=0; gci c:\addons -Recurse -Force | foreach -Process {$i+=$_.Length} ; $i
[/code:1]

Je me suis dit que cela pourrait être intéressant de voir la taille par sous-dossier (de premier niveau).

autrement dit, le dossier addons contient 2 sous-dossiers. j'aimerais avoir la taille des ces deux sous-dossiers.
cela ne me parait pas très compliqué sauf que le résultat n'est pas du tout ce que j'espérais


[code:1]
$dossier = \"c:\addons\"
Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}
foreach ($element in $dossier)
{
$i=0 ; gci -path $element -Force -Recurse | foreach -Process {$i+=$_.Length} ; $i
}
[/code:1]

pour moi, ca veut dire : pour tous les éléments du dossier c:\addons, additionne la taille des éléments les composant.
mais malheureusement, il me donne comme résultat la taille totale.

je m'y prends mal, mais je ne vois pas comment me sortir d'affaire.

si vous pouviez m'éclairer et m'expliquer pourquoi la voie choisie n'est pas la bonne.:blink:


merci<br><br>Message édité par: nzo, à: 19/12/13 21:09

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

Plus d'informations
il y a 12 ans 3 mois #16648 par Philippe
Réponse de Philippe sur le sujet Re:foreach
bonjour nzo

déjà la présentation du code va t'aidé a voir tes problèmes :

[code:1]$dossier = \&quot;c:\addons\&quot;

Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}

foreach ($element in $dossier)
{
$i=0
Get-ChildItem -path $element -Force -Recurse |
foreach { $i += $_.Length }
$i
}
[/code:1]

de plus ton script n'est valable que pour un seul niveau d'arboresence !!

la suite des explication arrive dans l'après midi, suivant ma dispo !
a moins qu'une autre personne ne soit dispo et prêt a repondre

Message édité par: 6ratgus, à: 19/12/13 15:00<br><br>Message édité par: 6ratgus, à: 19/12/13 15:22

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

Plus d'informations
il y a 12 ans 3 mois #16649 par Philippe
Réponse de Philippe sur le sujet Re:foreach
premiere etape : la liste des dossiers de addons

[code:1]$dossier = \&quot;c:\addons\&quot;

Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]

il maque quelque chose ! ou ce trouve la liste des dossiers de \&quot;addons\&quot; ? dans quel variable ?
nul part, tu aussi peut la transfère par pipeline \&quot;|\&quot; mais tu la pas fais !

solution 1 \&quot;la variable\&quot; :
[code:1]$dossier = \&quot;c:\addons\&quot;

$dossiers = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}[/code:1]

solution 2 \&quot;le pipeline\&quot; :
[code:1]$dossier = \&quot;c:\addons\&quot;

Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1} |
foreach {
....
[/code:1]

dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier
ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers
dans le deuxieme exemple il transfère l'objet directement à foreach via le pipeline

tu coup tu pourra l'utilisé pour le Get-ChildItem .... avece quel parametre ?

un indice :
[code:1]$element |Format-List -property *[/code:1]<br><br>Message édité par: 6ratgus, à: 19/12/13 15:26

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

Plus d'informations
il y a 12 ans 3 mois #16652 par ZOKI
Réponse de ZOKI sur le sujet Re:foreach
merci 6ratgus

voici le code modifié

[code:1]
cls
$dossier = \&quot;c:\addons\&quot;

$dossier = Get-ChildItem $dossier | Where-Object {$_.psiscontainer -eq 1}

@(
foreach ($element in $dossier)

{

$i=0

Get-ChildItem -path $element.FullName -Force -Recurse |

foreach { $i += $_.Length }

$i

}
)
[/code:1]


ce qui m'a mis sur la voie c'est
\&quot;dans le premier exemple ta variable contient un objet de type : System.IO.DirectoryInfo objet de definition d'un dossier ici c'est un tableau d'objet puisse qu'il y a plusieurs dossiers\&quot;

mais ce que j'aimerais comprendre c'est
[code:1]
$element |Format-List -property *
[/code:1]
comment les propriétés de $element auraient-elles pu m'aider ?
que dois-je voir dans cet indice

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

Plus d'informations
il y a 12 ans 3 mois #16653 par Philippe
Réponse de Philippe sur le sujet Re:foreach
argh :blush:

une question d'abord : quel version de powershell tu utilise ?

$PSVersionTable.PSVersion

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

Plus d'informations
il y a 12 ans 3 mois #16655 par Philippe
Réponse de Philippe sur le sujet Re:foreach
pardon, j'oublie toujours que mon powershell a un probleme d'install

quand j'utilise ton script j'ai :
La propriété « Length » est introuvable sur cet objet. Vérifiez qu'elle existe. pour chaque dossier

j'ai donc tester sur un autre ordi est tout va bien !!! :)

pour l'indice tu la trouver : la propriété fullname

par contre pourquoi tu utilise le @() ?

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

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