重命名具有相似模式的文件
Renaming files with similar pattern
我有一些视频文件和一些字幕文件。他们每个人的名字都有一个共同的部分,例如 *E05*.srt
和 *E05*.mkv
.
我想重命名每个视频文件以匹配其字幕,而不是 .srt
诅咒。
你能想出任何脚本吗?
我猜应该是这样的:
Ls *.mkv | ren -path {$_.fullname} -newname { ls -path { "new folder/*" + $_.basename + "*.srt" } | select name }
我不知道!
第二个ls
没有问题,会给我字幕,如果我运行单独没有ren
。
[我想不出更好的标题 post,如果有人能编辑它,我将不胜感激。]
假设所有字幕文件都以其各自视频文件的基本名称开头,这样的事情应该可行:
Get-ChildItem '*.mkv' | % {
$newname = Get-Item ($_.BaseName + '*.srt') | select -First 1 -Expand BaseName
if ($newname) { Rename-Item $_ "$newname.mkv" }
}
select
是 Select-Object
的别名,它允许您 select 输入对象的特定属性。不过,这仍然会给您留下一个对象,只有一组特定的属性(即使它只是一个)。但是,在某些情况下,您只需要 属性 的值而不是具有 属性 的对象。这就是 -ExpandProperty
参数(简称 -Expand
)的用途。它将给定的 属性 扩展为其值,在本例中为基本名称字符串。
示范:
PS C:\> <b>Get-Item .\test.txt</b>
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 13.06.2015 22:54 633 test.txt
PS C:\> <b>Get-Item .\test.txt | Select-Object BaseName</b>
BaseName
--------
test
PS C:\> <b>Get-Item .\test.txt | Select-Object -ExpandProperty BaseName</b>
test
我有一些视频文件和一些字幕文件。他们每个人的名字都有一个共同的部分,例如 *E05*.srt
和 *E05*.mkv
.
我想重命名每个视频文件以匹配其字幕,而不是 .srt
诅咒。
你能想出任何脚本吗?
我猜应该是这样的:
Ls *.mkv | ren -path {$_.fullname} -newname { ls -path { "new folder/*" + $_.basename + "*.srt" } | select name }
我不知道!
第二个ls
没有问题,会给我字幕,如果我运行单独没有ren
。
[我想不出更好的标题 post,如果有人能编辑它,我将不胜感激。]
假设所有字幕文件都以其各自视频文件的基本名称开头,这样的事情应该可行:
Get-ChildItem '*.mkv' | % {
$newname = Get-Item ($_.BaseName + '*.srt') | select -First 1 -Expand BaseName
if ($newname) { Rename-Item $_ "$newname.mkv" }
}
select
是 Select-Object
的别名,它允许您 select 输入对象的特定属性。不过,这仍然会给您留下一个对象,只有一组特定的属性(即使它只是一个)。但是,在某些情况下,您只需要 属性 的值而不是具有 属性 的对象。这就是 -ExpandProperty
参数(简称 -Expand
)的用途。它将给定的 属性 扩展为其值,在本例中为基本名称字符串。
示范:
PS C:\> <b>Get-Item .\test.txt</b>
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 13.06.2015 22:54 633 test.txt
PS C:\> <b>Get-Item .\test.txt | Select-Object BaseName</b>
BaseName
--------
test
PS C:\> <b>Get-Item .\test.txt | Select-Object -ExpandProperty BaseName</b>
test