文件批量重命名 - 匹配预定义的文本文件

时间:2016-04-01 18:56:31

标签: windows powershell batch-rename

美好的一天,

我正在尝试根据文本文件中的匹配/查找重命名/组织文件。

我在这样的文件夹中有几百个西里尔(俄语)命名的媒体文件:

  • файл35.avi
  • файл34.avi
  • файл24.avi
  • файл14.avi

*请注意,有些文件有空格

具有所需名称的文本文件如下所示:

  • файл35.avi| 4. файл35.avi
  • файл34.avi| 3. файл34.avi
  • файл24.avi| 1。файл24.avi
  • файл14.avi| 2。файл14.avi

它看起来那样(用|作为分隔符)是因为我尝试使用“Bulk Renaming Utility”使用管道|作为“重命名对”功能的分隔符。基本上,管道右边的文件名|是最终产品。不幸的是,该功能不适用于西里尔语(俄语)或其他非标准字符。

我发现PowerShell脚本HERE似乎几乎是我需要的,除了在重命名之前它与文件名不匹配。 同样,我发现这个Python脚本HERE可以满足我的需求,但它适用于Ubuntu。不幸的是,我在Windows7上并不确定它是否适用于我。

有什么建议吗?

非常感谢你的时间!

1 个答案:

答案 0 :(得分:0)

您可以将文本文件读入哈希表,其中键是旧名称(|左侧的值),值为新名称:

$RenameTable = @{}
Get-Content textfile.txt |ForEach-Object {
    $OldName,$NewName = $_.Split('|')
    $RenameTable[$OldName] = $NewName
}

然后根据哈希表中的内容重命名文件:

Get-ChildItem .\folder\with\avi\files |Rename-Item -NewName {
    if($RenameTable.ContainsKey($_.Name)){ 
        $RenameTable[$_.Name] 
    } else { 
        $_.Name 
    }
}