Toon posts:

[PowerShell] rename-item probleem met blokhaken

Pagina: 1
Acties:

Onderwerpen


  • significant
  • Registratie: Juni 2008
  • Laatst online: 01-06 13:28
Het schijnt een bekende bug te zijn in PowerShell: renamen van een file waar het pad blokhaken bevat.

Nu ben ik bezig mijn muziek collectie aan het organiseren en enige consistentie kan ik waarderen, vandaar onderstaand script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Clear-Host
$TagLib = "C:\taglib\Libraries\taglib-sharp.dll"
$Directory = "D:\Muziek\000000 test\"

$TagLib = [System.Reflection.Assembly]::LoadFile($TagLib);


Get-ChildItem -path $Directory -recurse | Where-Object {$_.Name -match "[:alnum:]*((ft){1}(\.)?|(Feat.){1})[:alnum:]*"} | Foreach {
    $Media  =  [TagLib.File]::Create($_.fullname)   
    $itemNewTag = $Media.Tag.performers -replace("((ft){1}(\.)?|(Feat.){1})", "feat.")
    $itemNewFileName = $_.Name -replace("((ft){1}(\.)?|(Feat.){1})", "feat.")
    
    $Media.Tag.Performers = $itemNewTag
    $Media.Save()

    Rename-Item $_.fullname $itemNewFileName
    
    #write-Host $itemNewTag
    #write-Host $itemNewFileName
    #Write-Host $_.fullname
     }

Nu heb ik in mijn albums ook het jaartal tussen blokhaken staan, en daar gaat het dus mis.

De oplossingen op internet krijg ik niet aan de praat, zoals b.v. http://powershellcommunit.../54/aft/3364/Default.aspx.

Weet iemand wat ik moet toevoegen/wijzigen? Dit is mijn eerste powershell script dus loop enigzins vast.

Cheers

Acties:
  • 0Henk 'm!

  • wagenveld
  • Registratie: Februari 2002
  • Niet online
Ik vraag me af of wat je probeert te doen niet gewoon met mp3tag kan?
http://www.mp3tag.de/en/

Acties:
  • 0Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 01-06 13:28
wagenveld schreef op zondag 26 juni 2011 @ 00:02:
Ik vraag me af of wat je probeert te doen niet gewoon met mp3tag kan?
http://www.mp3tag.de/en/
Het zijn >50 albums, waar niet ieder album zoiets heeft. mp3tag tag&rename werken dus niet. Deze tools gebruik ik wel als het kan :-)

Acties:
  • 0Henk 'm!

  • Anoniem: 303530
  • Registratie: Mei 2009
  • Niet online
Wilde gok: heb je al geprobeerd de blokhaken te escapen met behulp van het ` karakter (tide)?

Acties:
  • 0Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 01-06 13:28
Neen, nogmaals noob met powershell. Even googlen daarop.

Acties:
  • 0Henk 'm!

  • Anoniem: 303530
  • Registratie: Mei 2009
  • Niet online
Dat wil zeggen dat powershell het ` karakter implementeert zoals andere shells de backslash \ implementeert voor onder andere de bekende \r \n \t combinaties. Ik denk niet dat het werkt, maar daarom staat er ook "wilde gok" :+

Het zou ook fijn zijn als je even aangeeft, in een kleine case, wat er precies fout gaat.

[Voor 34% gewijzigd door Anoniem: 303530 op 26-06-2011 00:07]


Acties:
  • 0Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 01-06 13:28
Uit mijn linux ervaringen had ik nog even een andere omweg bedacht: ipv rename een move uitvoeren die stiekem renamed. Blijkbaar is daar ook het probleem met de blokhaken, maar kun je bij rename wel iets meegeven, de -LiteralPath optie, zodat het weer wel werkt.

Juistem, MS logica.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Clear-Host
$TagLib = "C:\taglib\Libraries\taglib-sharp.dll"
$Directory = "D:\Muziek\000000 test\"

$TagLib = [System.Reflection.Assembly]::LoadFile($TagLib);


Get-ChildItem -path $Directory -recurse | Where-Object {$_.Name -match "[:alnum:]*((ft){1}(\.)?|(Feat.){1})[:alnum:]*"} | Foreach {
    $Media  =  [TagLib.File]::Create($_.fullname)   
    $itemNewTag = $Media.Tag.performers -replace("((ft){1}(\.)?|(Feat.){1})", "feat.")
    $itemNewFileName = $_.fullName -replace("((ft){1}(\.)?|(Feat.){1})", "feat.")
    
    $Media.Tag.Performers = $itemNewTag
    $Media.Save()

    $itemFullPath = "f"

    Move-Item -LiteralPath $_.fullname $itemNewFileName 
    
    #write-Host $itemNewTag
    #write-Host $itemNewFileName
    
     }

Acties:
  • 0Henk 'm!

  • Anoniem: 303530
  • Registratie: Mei 2009
  • Niet online
Ik zat me zelf ook al te verbazen. CD-en naar een folder met blokhaken werkt, mits correct ge-escaped wel, maar als je datzelfde pad meegeeft aan de rename-item cmdlet geeft hij een dikke error 8)7

PS C:\> cd '.\folder`[`]'
PS C:\folder[]> rename-item foo bar      // werkt!
PS C:\folder[]> cd ..
PS C:\> rename-item '.\folder`[`]\bar' '.\folder`[`]\foo'      // werkt niet
Rename-Item : An object at the specified path C:\folder`[`]\bar does not exist.
At line:1 char:12
+ rename-item <<<<  '.\folder`[`]\bar' '.\folder`[`]\foo'
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RenameItemCommand

PS C:\>


Dan weten we dat ook weer: geen blokhaken gebruiken op een windows platform...

Acties:
  • 0Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 01-06 13:28
Ja het is te belachelijk voor woorden dit, wat ik er nu over lees is dit al sinds de eerste beta's van win 7 bekend. Sommige threads spreken zelfs over Vista, dan lig je als debug team toch lekker te ronken achter je werkplek. Het is niet superkritisch maar wel ontzettend lastig en iets wat je echt hoofdpijn kost als je het niet gelijk door hebt.
Ben benieuwd naar de motivatie voor het niet fixen van deze bug...
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee