是否删除PowerShell中最后一次出现下划线之前的文件名中的所有内容?

gjmwrych  于 2022-11-10  发布在  Shell
关注(0)|答案(2)|浏览(142)

我有数以万计的文件,将需要重命名后,手动操作大批量。所有文件都将有一个条形码,后跟唯一的字母数字识别字符串。它们也都有相同的.PDF扩展名。所有文件的唯一标识符前都应带有下划线。
例如:12 44571 522110_10_E-354-98-U90368.ENG
或:14 44571 500169_9_Monroe NE_G-462-02-5674.GER
重命名这些文件后,我需要保留的是唯一标识符,如下所示:

E-354-98-U90368.ENG
 G-462-02-5674.GER

我不精通PowerShell,我发现了一个有效的两步过程,但如果文件名中有错误,首先,它会删除扩展名和上面重要的唯一标识符。
分两步走的过程是这样的。第一,去掉条形码,每个文件在条形码后加上*#。如果它在这之后没有名字,那么我就完了。如果在第二个示例中,条形码和唯一标识符之间有Monroe NE*,我使用第二步。
如何在一步中删除最后一次出现下划线之前的所有内容?
这就是我尝试过的:
第一步:

Get-ChildItem -File "Folder Path Name" | Rename-Item -NewName { $_.Name -replace "Barcode", "" }

第二步:

$Files = Get-ChildItem -Path 'Folder Path Name’ -File 
foreach ($File in $Files) {
  $Split = $File.Name -split '_'
  if ($Split.Count -gt 1) {
    Rename-Item -Path $File.FullName -NewName $Split[1]}}
cetgtptt

cetgtptt1#

要获取数组中的最后一个*项,请使用索引-1

PS ~> $string = 'a_b_c'
PS ~> $split = $string -split '_'
PS ~> $split[-1]
c
qnzebej0

qnzebej02#

除了“马蒂亚斯·R·杰森的”有用而简洁的回答外,这里还有另一个选项,可以增加你的信息库。

'12 44571 522110_10_E-354-98-U90368.ENG', 
'14 44571 500169_9_Monroe NE_G-462-02-5674.GER' | 
ForEach-Object {$PSItem.Substring($PSItem.LastIndexOf('_')+1)}

# Results

<#
E-354-98-U90368.ENG
G-462-02-5674.GER

# >

相关问题