Question Rename une liste de fichiers..+ l'automatisé

Plus d'informations
il y a 10 ans 9 mois #20102 par Hamdoun
Bonjour je suis un jeune étudiant débutant en powershell

Aujourd'hui je voulais effectué un code qui change les noms de fichier a partir d'un fichier texte, ceci a été un succcès (même si j'ai des erreurs que je ne peut réglé)

Le voici donc:

[code:1]#lire liste noms des fichiers + filtre#
$listname = Get-ChildItem 'Y:\Users\HAMDOUN_M\Documents\D\Game Of Throne' -Filter *.bmp

#lire liste fichier txt#
$line = Get-Content 'Y:\Users\HAMDOUN_M\Documents\D\std\prod\recup.txt'

#compter les noms#
$count_listname= $listname.count

#compter les lignes fichier txt#
$count_line = $line.count

#tout compter


#Nombre d'action max (inf_list)#
$count= $count_listname, $count_line
$inf_list= ($count | measure -Min).Minimum

#Var fichier par fichier du répertoire#
$list_split= $listname
$list_split | foreach {
$list_split = $_ -split '*'

}

#Var ligne par ligne du fichier texte#
$line_split = $line
$line_split | foreach {
$line_split = $_ -split '*'
Write-Host $line_split []
}
#Selection des caractères à supprimer#
$erase=Read-Host \"Entrer les caractères à supprimer\"

#Selection des caractères à ajouter#


#Boucle#

$i= 0
while ($i -le $inf_list-1) {
$list_split[$i]| rename-item -newname { $_.name -replace ( $erase , $line_split[$i] )}
$i++
}

#output#
echo \"Fichier répertoire\" $listname \"\"
echo \"Fichier texte \" $line \"\"
echo \"Nombre de fichiers\" $count_listname \"\"
echo \"Nombre de ligne txt\" $count_line \"\"
echo \"Nombre d'action max\" $inf_list \"\"
echo \"Line by line\" $line_split \"\"
echo \"List one by one\" $list_split \"\"
echo \"Caractère a supprimer\" $erase \"\"[/code:1]

J'ai commencé a l'automatisé (\"entré les caractères à supprimé\" que j'ai déjà intégré dans ce code)

Mais je voulais l'automatisé totalement j'ai donc fait un autre code en reprenant celui ci en tant que base.

[code:1]#Déclaration de la Fonction : Select-Folder

function Select-Folder($message='Selectionner un répertoire', $path = 0)
{
$object = New-Object -comObject Shell.Application

$folder = $object.BrowseForFolder(0, $message, 0, $path)
if ($folder -ne $null)
{
$folder.self.Path
}
}
#Fin de la déclaration

#Appel de la Fonction pour afficher la boite de dialogue :
$folderpath=Select-Folder 'Selectionner un répertoire'

#lire liste noms des fichiers + filtre#
$listname = Get-ChildItem $folderpath


#Var fichier par fichier du répertoire#
$list_split= $listname
$list_split | foreach {
$list_split = $_ -split '*'
}

#Selection des caractères à supprimer#
$erase=Read-Host \"Entrer les caractères à supprimer\"

#Selection nombre de ligne#

$nb = Read-Host \"Entrer le nombres de ligne à ajouter\"


#Ligne de remplacement#
$z = 1
$a = 0
while ($a -le $nb-1) {
$list_input[$a] = Read-Host \"Nom du fichier N°\" $z
$z++
$a++
}

#compter les noms#
$count_listname= $listname.count

#Nombre d'action max (inf_list)#
$count= $count_listname, $nb
$inf_list= ($count | measure -Min).Minimum

#Boucle#
$i= 0
while ($i -le $inf_list-1) {
$list_input[$i]| rename-item -newname { $_.name -replace ( $erase , $list_input[$i] )}
$i++
}

#output#

echo \"Fichier répertoire\" $listname \"\"
echo \"Nombre de fichiers\" $count_listname \"\"
echo \"Nombre d'action max\" $inf_list \"\"

echo \"List one by one\" $list_split \"\"
echo \"Caractère a supprimer\" $erase \"\"
echo \"Tableau\" $list_input[0] $list_input[1] $list_input[2]

[/code:1]

Le problèmes se situe donc au niveau du tableau $list_split..


J'ai expliqué tout mon code étape par étape dans l'ordre (merci l'algo')
Si vous avez des questions sur mon code j'y répondrais avec joie.
Et si vous avez une solution j'en serais ravie aussi.

Thank you

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

Plus d'informations
il y a 10 ans 9 mois #20103 par Axel
Salut, tu travaille avec qu'elle version ?

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

Plus d'informations
il y a 10 ans 9 mois #20105 par Hamdoun
Salut
Sur la version 2.0.
Je n'ai pas cherché a voir ce qu'apporte les différentes versions donc je suis ouvert à toutes informations.<br><br>Message édité par: mhamdoun, à: 15/06/15 11:40

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

Plus d'informations
il y a 10 ans 9 mois #20107 par Axel
je suis également sous V2 mais je suis débutant donc difficile de t'aider :blush:

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

Plus d'informations
il y a 10 ans 9 mois #20108 par Hamdoun
D'accord merci quand même, j'attend quelqu'un de plus expérimenter du coup

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

Plus d'informations
il y a 10 ans 9 mois #20125 par Richard Lazaro
Bonjour,

Alors j'ai peut être mal lu mais il ne me semble pas que tu expliques ton problème.

Tout d'abord :

#Var fichier par fichier du répertoire#
$list_split= $listname
$list_split | foreach {
$list_split = $_ -split '*'
}

Pourquoi mettre $listname dans $list_split, si c'est pour redefinir a chaque fois $list_split.
De plus, alors que tu fais un Get-ChildItem (pour faire ton traitement sur tous les fichiers de ton répertoire), ton $list_split ne va contenir qu'un seul fichier au final (le dernier retournée par Get-ChildItem)

De plus, je pense que avec ton split tu souhaites récupérer un tableau de caractère non ? Alors déjà, chez moi la commande $_ -split '*' ne fonctionne pas :

[code:1]
PS C:\&gt; \&quot;toto\&quot; -split '*'
parsing \&quot;*\&quot; - Quantifier {x,y} following nothing.
At line:1 char:1
+ \&quot;toto\&quot; -split '*'
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (:«») [], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException
[/code:1]

La facon la plus propre de faire ça est, je pense, d'utiliser la méthode ToCharArray()

[code:1]
PS C:\&gt; ('toto').ToCharArray()
t
o
t
o
[/code:1]

Je pense aussi que tu as un problème d'organisation algorithmique, puis j'arrive pas trop a comprendre ce que tu cherches a faire avec ton script (ligne a ajouter ?? action max ??)

Bref, soit je suis pas réveillé soit va me faloir plus de détails pour comprendre ^^

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

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