2017-01-10 5 views
0

Ich habe eine Batch-Dateien mit dem aktuellen Format:Umbenennen von Dateien in Powershell durch Zeichenfolge nach rechts oder links von Charakter bewegen

[filename]_[date].jpg 

Ich wünsche ihnen das folgende Format umzubenennen:

[date]_[filename].jpg 

Um dies zu tun, habe ich das folgende Skript:

GET-CHILDITEM .\*.jpg | WHERE-OBJECT {$_.NAME -MATCH '[A-Za-z]+?_[0-9]{6}.jpg'} | RENAME-ITEM -NEWNAME {[STRING]($_.NAME).SUBSTRING($_.BASENAME.LENGTH - 6, 6) + ($_.NAME).SUBSTRING(0,$_.INDEXOF("_"))+$_.EXTENSION} -WHATIF 

ich einen Fehler zu sagen [System.IO.FileInfo] nicht c erhalte eine Methode mit dem Namen 'INDEXOF'

Ich weiß, dass mein Problem INDEXOF ist. Ich glaube nicht, dass ich es auf diese Weise benutzen kann. Also meine Frage ist, was verwende ich?

Zum gleichen Thema würde die gleiche Methode rückwärts arbeiten, eine Zeichenfolge von rechts nach links von "_" bewegen?

Antwort

1

Dies ist eigentlich viel einfacher als Sie erwarten, wenn Sie eine ForEach-Object Schleife zu Ihrer Pipeline hinzufügen. Da Sie bereits die -match-Operator können Sie die $Matches automatische Variable wie so nutzen:

Get-ChildItem .\*.jpg | Where{$_.Name -match '^([A-Za-z]+?)_(\d{6})\.jpg'} | ForEach{ 
    $_ | Rename-Item -NewName {$Matches[2] + '_' + $Matches[1] + '.jpg'} -WhatIf 
} 
+0

funktioniert super! Vielen Dank – TheAlmightyOverSeer

0

Sie können versuchen, diese ein

$x = '[filename]_[date].jpg' 
$a = $x.split('_.') 
$y = ($a[1], $a[0]) -join '_' 
($y, $a[2]) -join '.' 
Verwandte Themen