[PowerShell] rename-item probleem met blokhaken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 12:02
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:
  • 0 Henk '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:
  • 0 Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 12:02
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:
  • 0 Henk 'm!

Anoniem: 303530

Wilde gok: heb je al geprobeerd de blokhaken te escapen met behulp van het ` karakter (tide)?

Acties:
  • 0 Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 12:02
Neen, nogmaals noob met powershell. Even googlen daarop.

Acties:
  • 0 Henk 'm!

Anoniem: 303530

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:
  • 0 Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 12:02
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:
  • 0 Henk 'm!

Anoniem: 303530

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:
  • 0 Henk 'm!

  • significant
  • Registratie: Juni 2008
  • Laatst online: 12:02
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