2017-01-10 82 views
0

的我有一批與當前格式文件:重命名文件在PowerShell中移動字符串向左或向右字符

[filename]_[date].jpg 

我希望他們重命名爲以下格式:

[date]_[filename].jpg 

要做到這一點,我創建了下面的腳本:

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 

我得到一個錯誤說[System.IO.FileInfo]確實不是C請求一個名爲'INDEXOF'的方法

我知道我的問題是INDEXOF。我認爲我不能以這種方式使用它。所以我的問題是我使用什麼?

在相同的主題上,同樣的方法會反向工作,將字符串從「_」的右側移動到左側?

回答

1

如果您向流水線添加ForEach-Object循環,這實際上比您期望的要容易得多。既然你已經在使用-match運營商可以利用$Matches自動變量像這樣:

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

偉大的作品!謝謝 – TheAlmightyOverSeer

0

你可以試試這個

$x = '[filename]_[date].jpg' 
$a = $x.split('_.') 
$y = ($a[1], $a[0]) -join '_' 
($y, $a[2]) -join '.' 
相關問題