我有一些像这样的视频文件:
VideoName_s01e01.mp4
季节和剧集是变量.我想在s??
和之间添加一个下划线("_")e??
.
我一直在使用powershell进行重命名,我有一个起点:
GCI $path -filter '*_s??e??*' -rec | Ren -new { $_.name -replace '_s[0-9][0-9]', '_s[0-9]_[0-9]_' } -passthru
Run Code Online (Sandbox Code Playgroud)
这实际上重命名了我的文件VideoName_s[0-9]_e[0-9].mp4
.
基本上,我正在寻找s??e??
我不知道如何在替换部分中使它们成为变量的字符.
我认为最好的方法是:
e??s??
(我们称之为X)的位置.X-3
._
到中间的" ".我正在查看 PowerShell 的Rename-Item
cmdlet的文档,有一个这样的例子。
Get-ChildItem *.txt | Rename-Item -NewName { $_.name -Replace '\.txt','.log' }
Run Code Online (Sandbox Code Playgroud)
此示例说明如何使用 Replace 运算符重命名多个文件,即使 NewName 参数不接受通配符也是如此。
此命令将当前目录中的所有 .txt 文件重命名为 .log。
该命令使用 Get-ChildItem cmdlet 获取当前文件夹中具有 .txt 文件扩展名的所有文件。然后,它使用管道运算符 (|) 将这些文件发送到 Rename-Item 。
NewName 的值是在将值提交给 NewName 参数之前运行的脚本块。
注意最后一句话:
NewName 的值是在将值提交给 NewName 参数之前运行的脚本块。
实际上NewName
是一个字符串:
[-NewName] <String>
Run Code Online (Sandbox Code Playgroud)
那么这是否意味着当所需的参数类型是字符串时,我总是可以使用脚本块?
powershell ×2
cmdlets ×1
delay-bind ×1
file ×1
parameters ×1
rename ×1
replace ×1
scriptblock ×1