我有一些视频文件和一些字幕文件。每个名称中都有一个共同部分,例如*E05*.srt
和*E05*.mkv
。
我想重命名每个视频文件以匹配其副标题,而不是.srt
的诅咒。
你能想到任何剧本吗?
我想它应该是这样的:
Ls *.mkv | ren -path {$_.fullname} -newname { ls -path { "new folder/*" + $_.basename + "*.srt" } | select name }
我不知道!
第二个ls
没有任何问题,并且如果我单独运行且没有ren
,则会给我字幕。
[我想不出这篇文章的任何更好的标题,如果有人可以编辑,我会很感激。]
答案 0 :(得分:1)
假设所有字幕文件都以各自视频文件的基本名称开头,这样的话应该有效:
Get-ChildItem '*.mkv' | % {
$newname = Get-Item ($_.BaseName + '*.srt') | select -First 1 -Expand BaseName
if ($newname) { Rename-Item $_ "$newname.mkv" }
}
select
是Select-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