Question
[RESOLU] Un problème de boucles ou de variables
- Thomas
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 7 ans 4 mois #27763
par Thomas
[RESOLU] Un problème de boucles ou de variables a été créé par Thomas
Bonjour à tous et à toutes
Je viens de me mettre au Powershell et je fais mon premier petit script pour apprendre ce langage.
J’essaie actuellement de créer un script pour modifier les métadatas de fichiers audios en fonction du répertoire.
L’arborescence s’organiser de la façon suivante :
-artiste1
-album1
-album2
-artiste2
-albumA
-albumB
Avec le script j’essaie de récupérer le nom du dossier artiste puis le nom du dossier album pour que les fichiers soient modifiés en conséquence.
Mais le problème c’est que lors des déplacements il me dit ne pas trouver le chemin pour accéder à mes fichiers.
Normalement il devait aller dans E:\Musiques puis E:\Musiques\artiste1 puis E:\Musiques\artiste1\album1 et modifier les métadatas. Pour aller dans l’autre dossier (album2) et une fois terminé changer de dossier artiste.
Mais au lieu de cela il me dit que le chemin E:\Musiques\artiste1\artiste1 et E:\Musiques\artiste1\artiste2 n’existe pas.
Le programme met à la place de l’album le nom de l’artiste (ou d’un autre artiste) et je n’arrive pas à voir où je me suis trompé.
J’espère avoir été assez clair.
Merci d’avance pour votre aide.
[code:1]$location=\"E:\Musiques\\"
$taglibsharpPath=“D:\Powershell\lib\taglib-sharp\taglib-sharp.dll”
[Reflection.Assembly]::LoadFrom($taglibsharpPath)
cd $location
$folderArtiste = Get-ChildItem -Path $location | Where-Object { ($_.PSIsContainer) }
foreach ($artFolder in $folderArtiste){
cd $location
cd $artFolder
$artiste = get-location | split-path -leaf
$folderAlbum = Get-ChildItem -Path $artFolder | Where-Object { ($_.PSIsContainer) }
foreach ($albFolder in $folderAlbum){
echo $albFolder
cd $albFolder
$album= get-location | split-path -leaf
$albumLocation= get-location
$files = Get-ChildItem -Path $albumLocation | Where-Object { (-not $_.PSIsContainer) }
foreach ($filename in $files){
$media = [TagLib.File]::Create(($albumLocation+\"\\"+$filename))
$media.Tag.Album = $album
$media.Tag.AlbumArtists = $artiste
$media.Save()
}
cd ..
}
}[/code:1]<br><br>Message édité par: titom7986, à: 28/11/18 10:05
Je viens de me mettre au Powershell et je fais mon premier petit script pour apprendre ce langage.
J’essaie actuellement de créer un script pour modifier les métadatas de fichiers audios en fonction du répertoire.
L’arborescence s’organiser de la façon suivante :
-artiste1
-album1
-album2
-artiste2
-albumA
-albumB
Avec le script j’essaie de récupérer le nom du dossier artiste puis le nom du dossier album pour que les fichiers soient modifiés en conséquence.
Mais le problème c’est que lors des déplacements il me dit ne pas trouver le chemin pour accéder à mes fichiers.
Normalement il devait aller dans E:\Musiques puis E:\Musiques\artiste1 puis E:\Musiques\artiste1\album1 et modifier les métadatas. Pour aller dans l’autre dossier (album2) et une fois terminé changer de dossier artiste.
Mais au lieu de cela il me dit que le chemin E:\Musiques\artiste1\artiste1 et E:\Musiques\artiste1\artiste2 n’existe pas.
Le programme met à la place de l’album le nom de l’artiste (ou d’un autre artiste) et je n’arrive pas à voir où je me suis trompé.
J’espère avoir été assez clair.
Merci d’avance pour votre aide.
[code:1]$location=\"E:\Musiques\\"
$taglibsharpPath=“D:\Powershell\lib\taglib-sharp\taglib-sharp.dll”
[Reflection.Assembly]::LoadFrom($taglibsharpPath)
cd $location
$folderArtiste = Get-ChildItem -Path $location | Where-Object { ($_.PSIsContainer) }
foreach ($artFolder in $folderArtiste){
cd $location
cd $artFolder
$artiste = get-location | split-path -leaf
$folderAlbum = Get-ChildItem -Path $artFolder | Where-Object { ($_.PSIsContainer) }
foreach ($albFolder in $folderAlbum){
echo $albFolder
cd $albFolder
$album= get-location | split-path -leaf
$albumLocation= get-location
$files = Get-ChildItem -Path $albumLocation | Where-Object { (-not $_.PSIsContainer) }
foreach ($filename in $files){
$media = [TagLib.File]::Create(($albumLocation+\"\\"+$filename))
$media.Tag.Album = $album
$media.Tag.AlbumArtists = $artiste
$media.Save()
}
cd ..
}
}[/code:1]<br><br>Message édité par: titom7986, à: 28/11/18 10:05
Connexion ou Créer un compte pour participer à la conversation.
- Thomas
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 6
- Remerciements reçus 0
il y a 7 ans 3 mois #27861
par Thomas
Réponse de Thomas sur le sujet Re:Un problème de boucles ou de variables
Bonjour à tous et à toutes.
Bon j’ai mis un peu de temps à trouver (et puis j’avais un peu lâché ce script), mais j’ai trouvé la solution.
Alors déjà en ce qui concerne le le get-childitem, étant donné que je fais un CD avant et que je suis déjà dans le dossier de l’artiste je n’avais pas besoin de préciser le path, c’est pour cela que j’avais un artiste1/artiste1 et forcément ça n’existait pas.
Ensuite j’ai fourni dans certaines commandes des variables qui n’étaient pas des chaînes de caractères donc il fallait que je les castes avant, pour les concaténer et ensuite les fournir pour remplir les informations avec la librairie taglib.
Du coup voici à quoi ressemble le script maintenant pour ceux que ça pourrait intéresser.
J’ai encore quelques erreurs mais du au fait que dans certains cas la musique n’étant pas fini d’être assemblé j’ai des sous dossiers (voix1, batterie, sample …) et que pour le moment ne script ne fonctionne qu’avec Artiste/Album.
Merci
[code:1]$taglibsharpPath=“C:\Users\Thomas\Google Drive\Powershell\lib\taglib-sharp\taglib-sharp.dll”
$location=\"D:\Musiques\\"
[Reflection.Assembly]::LoadFrom($taglibsharpPath)
set-location -path $location
$listeArtiste = Get-ChildItem | Where-Object { ($_.PSIsContainer) }
foreach ($artisteFolder in $listeArtiste){
set-location -path $location
set-location -path $artisteFolder
$listeAlbum = Get-ChildItem | Where-Object { ($_.PSIsContainer) }
foreach ($albumFolder in $listeAlbum){
set-location -path $albumFolder
$files = Get-ChildItem | Where-Object { (-not $_.PSIsContainer -and ($_.extension -eq \".mp3\" -or $_.extension -eq \".wav\"«»)) }
foreach ($filename in $files){
$emplacement = (Get-Location).tostring() + \"\\" + $filename
attrib -r $emplacement
$media = [TagLib.File]::Create(($emplacement))
$media.Tag.Album = $albumFolder
$media.Tag.AlbumArtists = $artisteFolder
$media.Save()
}
cd ..
}
}[/code:1]
Bon j’ai mis un peu de temps à trouver (et puis j’avais un peu lâché ce script), mais j’ai trouvé la solution.
Alors déjà en ce qui concerne le le get-childitem, étant donné que je fais un CD avant et que je suis déjà dans le dossier de l’artiste je n’avais pas besoin de préciser le path, c’est pour cela que j’avais un artiste1/artiste1 et forcément ça n’existait pas.
Ensuite j’ai fourni dans certaines commandes des variables qui n’étaient pas des chaînes de caractères donc il fallait que je les castes avant, pour les concaténer et ensuite les fournir pour remplir les informations avec la librairie taglib.
Du coup voici à quoi ressemble le script maintenant pour ceux que ça pourrait intéresser.
J’ai encore quelques erreurs mais du au fait que dans certains cas la musique n’étant pas fini d’être assemblé j’ai des sous dossiers (voix1, batterie, sample …) et que pour le moment ne script ne fonctionne qu’avec Artiste/Album.
Merci
[code:1]$taglibsharpPath=“C:\Users\Thomas\Google Drive\Powershell\lib\taglib-sharp\taglib-sharp.dll”
$location=\"D:\Musiques\\"
[Reflection.Assembly]::LoadFrom($taglibsharpPath)
set-location -path $location
$listeArtiste = Get-ChildItem | Where-Object { ($_.PSIsContainer) }
foreach ($artisteFolder in $listeArtiste){
set-location -path $location
set-location -path $artisteFolder
$listeAlbum = Get-ChildItem | Where-Object { ($_.PSIsContainer) }
foreach ($albumFolder in $listeAlbum){
set-location -path $albumFolder
$files = Get-ChildItem | Where-Object { (-not $_.PSIsContainer -and ($_.extension -eq \".mp3\" -or $_.extension -eq \".wav\"«»)) }
foreach ($filename in $files){
$emplacement = (Get-Location).tostring() + \"\\" + $filename
attrib -r $emplacement
$media = [TagLib.File]::Create(($emplacement))
$media.Tag.Album = $albumFolder
$media.Tag.AlbumArtists = $artisteFolder
$media.Save()
}
cd ..
}
}[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 7 ans 3 mois #27863
par Philippe
Réponse de Philippe sur le sujet Re:Un problème de boucles ou de variables
salut titom7986
merci du retour
ça peut toujours servir
merci du retour
ça peut toujours servir
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [RESOLU] Un problème de boucles ou de variables