是否可以使用PowerShell删除文件夹中所有文件的文件名结尾?例子:
所以我想删除" by"到" .jpg"。
答案 0 :(得分:1)
是的,您可以在文件BaseName
上使用LastIndexOf()
方法找出将其剪切的位置,然后使用Substring()
:
Set-Location C:\path\to\folder
Get-ChildItem -Path $PWD -Filter "*.jpg" |ForEach-Object {
if(($lastIndex = $_.BaseName.LastIndexOf("_by_")) -ne -1){
$NewName = "{0}{1}" -f $_.BaseName.Substring(0, $lastIndex),$_.Extension
Rename-Item $_.FullName -NewName $NewName
}
}
如果LastIndexOf()
找不到我们要查找的子字符串(在本例中为_by_
),则会返回-1
,在这种情况下不应执行任何操作
答案 1 :(得分:0)
我会使用ForEach循环,如下所示:
gci e:\temp\*.jpg | % {
Rename-Item -path $_.FullName -NewName "$($_.Name.Substring(0,$_.Name.LastIndexOf('by')))$($_.Extension)" -WhatIf }
What if: Performing the operation "Rename File" on target "Item: E:\temp\moira_by_kr0npr1nz-d8poqdb.jpg Destination: E:\temp\moira_.jpg".
What if: Performing the operation "Rename File" on target "Item: E:\temp\redemptionthe_hunters_by_danluvisiart-d8oy1ef.jpg Destination: E:\temp\redemptionthe_hunters_.jpg"
What if: Performing the operation "Rename File" on target "Item: E:\temp\shining_eyestep_by_step_by_ryky-d8pp6xh.jpg Destination: E:\temp\shining_eyestep_by_step_.jpg".
逻辑是我们得到了我们想要的文件列表(例如所有JPG),然后我们使用ForEach-Object迭代它们,并指定NewName参数来更改名称。
我打破那里引号内发生的事情:
我在一个像这样的文件的目录上测试了这个,它就像一个魅力。使用-WhatIf运行一次,这样你就可以看到会发生什么。如果您喜欢所看到的内容,请在不使用-WhatIf的情况下再次运行。
答案 2 :(得分:0)
如何使用正则表达式替换如此:
Get-ChildItem -Filter "*.jpg" | % {
Rename-Item $_.FullName -NewName ($_.FullName -replace '_by_.*\.jpg$', '')
}
如果正则表达式找不到匹配项,则文件名保持不变。