如何从多个文件名中删除指定字符后的所有字符-Powershell

问题描述 投票:0回答:1

原谅我,如果我讲得不好,我是PowerShell的新手。

我正在尝试清理媒体文件,并试图从具有目录的所有子目录的多个文件中删除指定字符串之后的所有字符。

文件名长度将不一致。但是文件类型会。我还需要从扩展名中排除该扩展名。

所以文件看起来像这样:

  1. TVshow S01 E01 Episode.mp4的标题
  2. LongerTVShow S03 E01 Episode.mp4的标题

我想删除E01之后的所有内容,同时保留E01

结果:

  1. TVshow S01 E01.mp4
  2. LongerTVShow S03 E01.mp4

我目前还有其他几行用于清除我指定的字符,例如查找句点并将其替换为空格:

get-childitem -recurse | dir -Filter *.mp4 | Rename-Item -NewName { $_.BaseName.replace('.',' ') + $_.Extension }

效果很好,因为它将应用于目录中的所有文件。但是您需要指定要替换的字符。

然后我只是将命令的多个实例用于E01,E02,E03等。以相同的方式,我删除了以下代码中的多个字符串:

get-childitem -recurse | dir -Filter *.txt | Rename-Item -NewName { $_.BaseName.replace('1080p','').replace('720p','').replace('HD','') + $_.Extension }

我希望沿相同的方向使用某些东西,我已经看到了修剪或分割的建议,但似乎无法弄清楚,也找不到任何东西。

谢谢您的回答!


编辑

我使用了AdminOfThings的代码,并将其添加到我拥有的代码中。

get-childitem -recurse |dir -Filter *.mp4 | Rename-Item -NewName { ($_.BaseName -creplace '(?<=S\d+ E\d+)\D.*') + $_.Extension }

因此,如果将来有人需要这样的文件,它将重命名该目录及其运行的所有子目录中的所有.mp4文件。尤其是E01,E02,E03等之后的所有内容。导致以下结果:

  1. TvShow S01 E04 title_of_show.mp4
  2. TvShow S08 E03Title_of_show.mp4

进入:

  1. TvShow S01 E04.mp4
  2. TvShow S08 E03.mp4

非常具体,但有人可能会觉得有用。

string powershell replace trim
1个回答
0
投票

这很长,但是呢:

dir -Filter *.mp4 | Rename-Item -NewName { $_.BaseName.Split(' ')[0] + ' ' + $_.BaseName.Split(' ')[1] + ' ' + $_.BaseName.Split(' ')[2] + $_.Extension }
© www.soinside.com 2019 - 2024. All rights reserved.