从文件名中剪切一部分

从文件名中剪切一部分

我得到了如下命名的文件:

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%"

相关内容