重命名具有类似模式的文件

时间:2015-06-12 02:05:21

标签: powershell powershell-v2.0

我有一些视频文件和一些字幕文件。每个名称中都有一个共同部分,例如*E05*.srt*E05*.mkv

我想重命名每个视频文件以匹配其副标题,而不是.srt的诅咒。

你能想到任何剧本吗?

我想它应该是这样的:

Ls *.mkv | ren -path {$_.fullname} -newname { ls -path { "new folder/*" + $_.basename + "*.srt" } | select name }

我不知道!

第二个ls没有任何问题,并且如果我单独运行且没有ren,则会给我字幕。

[我想不出这篇文章的任何更好的标题,如果有人可以编辑,我会很感激。]

1 个答案:

答案 0 :(得分:1)

假设所有字幕文件都以各自视频文件的基本名称开头,这样的话应该有效:

Get-ChildItem '*.mkv' | % {
  $newname = Get-Item ($_.BaseName + '*.srt') | select -First 1 -Expand BaseName
  if ($newname) { Rename-Item $_ "$newname.mkv" }
}

selectSelect-Object的别名,它允许您选择输入对象的特定属性。但是,这仍将为您提供一个对象,只需要一组特定的属性(即使它只是一个)。但是,在某些情况下,您只需要属性的值而不是具有该属性的对象。这就是-ExpandProperty参数(简称-Expand)的用途。它将给定属性扩展为其值,在本例中为basename string。

演示:

PS C:\> Get-Item .\test.txt

    Directory: C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        13.06.2015     22:54        633 test.txt

PS C:\> Get-Item .\test.txt | Select-Object BaseName

BaseName
--------
test

PS C:\> Get-Item .\test.txt | Select-Object -ExpandProperty BaseName
test