Question [Résolu] Aide pour script de création de dossier

Plus d'informations
il y a 16 ans 3 semaines #6231 par Hugo Poi
Bonjour,
Je débute en Powershell et j'aimerais creer un script pour faire dans l'ordre :

-Créer un dossier portant le nom de chaque fichier (sans l'extension) présent dans le dossier en cours
-Puis déplacer chaque fichier dans le dossier correspondant

Pour créer les dossiers j'ai un début:
[code:1]Get-ChildItem *.* | New-Item -type \"directory\"[/code:1]
mais il manque quelquechose pour editer le nom (pour enlever l'extension) qui est pipe ,peut-etre -replace(\".\",\"\"):S

si un expert pouvez m'expliquer ;) comment pipe un nom modifier a partir d'un Get-ChildItem<br><br>Message édité par: Arnaud, à: 1/03/10 23:29

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

Plus d'informations
il y a 16 ans 3 semaines #6236 par Vara
Salut,

Tu peux déjà décortiquer cette commande...

[code:1]Get-ChildItem | foreach $_.name {$_.name.split(\&quot;.\&quot;«»);New-Item $_.name[0] -type \&quot;directory\&quot;;move-item $_.name -destination $_.name[0]}[/code:1]

1 - Get-childitem récupère le contenu du répertoire
2 - pour chaque éléments, tu split le nom sur le \&quot;.\&quot;, tu créés un nouveau répertoire sur la base du split et tu déplaces chaque éléments dans les répertoires nouvellement créés.

Attention, si le nom des fichiers contient plus d'un \&quot;.\&quot; il faut que tu trouves une autre solution que le split.

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

Plus d'informations
il y a 16 ans 3 semaines #6237 par Hugo Poi
Je viens de tester quelques truc et j'ai reussi a faire ça :
[code:1]PS E:\test script&gt; Get-ChildItem *.* |foreach $_.name {$_.name.split(\&quot;.\&quot;«»)[0] }
film (1)
film (10)
film (11)
film (12)
film (13)
film (14)
film (15)
film (2)
film (3)
film (4)
film (5)
film (6)
film (7)
film (8)
film (9)
Nouveau document texte[/code:1]
mais je ne peux pas le transmettre comme cela :
[code:1]PS E:\test script&gt; Get-ChildItem *.* |foreach $_.name {$_.name.split(\&quot;.\&quot;«»)[0] } | New-Item -type \&quot;directory\&quot;
New-Item : L'objet d'entrée ne peut pas être lié, car il ne contient pas les informations requises pour lier tous les p
aramètres obligatoires : Path
Au niveau de ligne : 1 Caractère : 71
+ Get-ChildItem *.* |foreach $_.name {$_.name.split(\&quot;.\&quot;«»)[0] } | New-Item &lt;&lt;&lt;&lt; -type \&quot;directory\&quot;
+ CategoryInfo : InvalidArgument: (film (1):«»String) [New-Item], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectMissingMandatory,Microsoft.PowerShell.Commands.NewItemCommand

New-Item : L'objet d'entrée ne peut pas être lié, car il ne contient pas les informations requises pour lier tous les p
aramètres obligatoires : Path
Au niveau de ligne : 1 Caractère : 71
+ Get-ChildItem *.* |foreach $_.name {$_.name.split(\&quot;.\&quot;«»)[0] } | New-Item &lt;&lt;&lt;&lt; -type \&quot;directory\&quot;
+ CategoryInfo : InvalidArgument: (film (10):«»String) [New-Item], ParameterBindingException
+ FullyQualifiedErrorId : InputObjectMissingMandatory,Microsoft.PowerShell.Commands.NewItemCommand
.......[/code:1]
ce n'est pas le type d'objet que la commande New-Item attends

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

Plus d'informations
il y a 16 ans 3 semaines #6238 par Vara
Re,

Il faut que créer les répertoires et déplacer les fichiers dans le ForEach.
Il ne faut pas passer par un nouveau pipe '|'.

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

Plus d'informations
il y a 16 ans 3 semaines #6239 par Hugo Poi
exact comme cela pour créer les dossiers :

[code:1] Get-ChildItem *.* |foreach $_.name {New-Item -Name $_.name.split(\&quot;.\&quot;«»)[0] -type \&quot;directory\&quot;}[/code:1]

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

Plus d'informations
il y a 16 ans 3 semaines #6240 par Hugo Poi
[code:1]PS E:\test script&gt; Get-ChildItem *.* | foreach { New-Item -Name $_.Name.split(\&quot;.\&quot;«»)[0] -type \&quot;directory\&quot; ; Move-Item $_.N
ame -Destination $_.Name.split(\&quot;.\&quot;«»)[0] }


Répertoire : E:\test script


Mode LastWriteTime Length Name
----

----
d---- 23/02/2010 18:18 film (1)
d---- 23/02/2010 18:18 film (10)
d---- 23/02/2010 18:18 film (11)
d---- 23/02/2010 18:18 film (12)
d---- 23/02/2010 18:18 film (2)
d---- 23/02/2010 18:18 film (3)
d---- 23/02/2010 18:18 film (4)
d---- 23/02/2010 18:18 film (5)
d---- 23/02/2010 18:18 film (6)
d---- 23/02/2010 18:18 film (7)
d---- 23/02/2010 18:18 film (8)
d---- 23/02/2010 18:18 film (9)


PS E:\test script&gt;[/code:1]

Voila j'ai réussi à faire exactement ce que je voulais :)

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

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