我得到了如下命名的文件:
cam1(word1 word2 wordN) (24-04-2012 00-11-13).mpg
cam2(word1 word2 wordN) (24-04-2012 00-11-13).mpg
cam3(word1 word2 wordN) (24-04-2012 00-11-13).mpg
需要剪切(word1 word2 word3)
并将空格替换为_
。预期重命名的文件:
cam1_(24-04-2012_00-11-13).mpg
cam2_(24-04-2012_00-11-13).mpg
cam3_(24-04-2012_00-11-13).mpg
在第一对括号中,单词的数量可能不同。时间戳始终相同。
答案1
PowerShell 允许你执行正则表达式匹配,因此很容易做到这一点重命名项目:
Get-ChildItem *.mpg | Rename-Item -WhatIf -NewName `
{ $_.Name -replace '(.+?)\(.+?\) \((.+) (.+)\)', '$1_($2_$3)' }
您还可以使用别名缩短命令:
> ls *.mpg | ren -wi -Ne `
{ $_.Name -replace '(.+?)\(.+?\) \((.+) (.+)\)', '$1_($2_$3)' }
What if: Performing the operation "Rename File" on target "Item: C:\Users\cam1(word1 word2 wordN) (24-04-2012 00-11-13).mpg Destination: C:\Users\cam1_(24-04-2012_00-11-13).mpg".
What if: Performing the operation "Rename File" on target "Item: C:\Users\cam2(word1 word2 wordN) (24-04-2012 00-11-13).mpg Destination: C:\Users\cam2_(24-04-2012_00-11-13).mpg".
What if: Performing the operation "Rename File" on target "Item: C:\Users\cam3(word1 word2 wordN) (24-04-2012 00-11-13).mpg Destination: C:\Users\cam3_(24-04-2012_00-11-13).mpg".
(.+?)\(.+?\) \((.+) (.+)\)
是一个正则表达式,它捕获第一个单词和两个日期时间字符串,然后我们将匹配的字符串组合在一起以获得预期的输出
-WhatIf
或-wi
选择进行试运行。检查新名称是否有效后,只需将其删除即可进行真正的重命名
答案2
我用过批量重命名实用程序就是为了做这种事情。它允许您轻松地删除、编辑、替换或添加文件名中的数字。它还可以批量处理文件。我一直用它来重命名照片和视频剪辑以及 mp3 文件。
答案3
按照 Scott 的建议[编辑]
如果你可以编写一些脚本,我建议自动热键 您可以使用简单的 regexmatch() 来满足您的需要
以下是示例代码
Filelist=
Loop, C:\Data\*.mpg ;Assuming your files in data folder
Filelist = %Filelist%%A_LoopFileFullPath%`n
Loop, parse, filelist, `n
{
Renamed := Regrxreplace(A_Loopfield, "\(\w.+\)\s", "_")
Filemove, %A_LoopField%, %Renamed%
}
*对几个文件进行测试
问候 SDK。
答案4
将此代码添加到批处理文件中。
For /f "tokens=1-3 delims=(" %%a in ('dir *.mpg /b') do call :DoRename "%%a" "%%b" "%%c"
Goto :eof
:DoRename
Set SrcFile=%1(%2(%3
Set SrcFile=%srcfile:"=%
Set DestFile=%1 (%3
Set DestFile=%DestFile:"=%
Set DestFile=%DestFile: =_%
Rename "%SrcFile%" "%DestFile%"