Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 文件批量重命名-匹配预定义的文本文件_Windows_Powershell_Batch Rename - Fatal编程技术网

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

Windows 文件批量重命名-匹配预定义的文本文件,windows,powershell,batch-rename,Windows,Powershell,Batch Rename,你好 我正在尝试根据文本文件中的匹配/查找来重命名/组织文件 我在这样一个文件夹中有几百个西里尔文(俄语)命名的媒体文件: фааФ35.avi фаааа34.avi фааа2 4.avi фаааа14.avi *请注意,有些文件有空格 具有所需名称的文本文件如下所示: фааа35.avi4.фааа35.avi фааа34.avi3.фаа34.avi фаа2 4.avi1.фаа2 4.avi фааа14.avi|2.фааа14.avi 之所以看起来如此(以|作为分隔

你好

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

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

  • фааФ35.avi
  • фаааа34.avi
  • фааа2 4.avi
  • фаааа14.avi
*请注意,有些文件有空格

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

  • фааа35.avi4.фааа35.avi
  • фааа34.avi3.фаа34.avi
  • фаа2 4.avi1.фаа2 4.avi
  • фааа14.avi|2.фааа14.avi
之所以看起来如此(以|作为分隔符),是因为我尝试使用“批量重命名实用程序”,它使用管道|作为“重命名对”函数的分隔符。因此,本质上,管道右边的文件名是最终产品。不幸的是,该函数不适用于西里尔文(俄语)或其他非标准字符

我找到了PowerShell脚本,它看起来几乎就是我所需要的,只是它在重命名之前与文件名不匹配。 类似地,我找到了这个Python脚本,它可以满足我的需要,但它是用于Ubuntu的。不幸的是,我在Windows7上,不确定它是否适用于我

有什么建议吗


非常感谢您抽出时间

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

$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 
    }
}

为什么您不能再次使用批量重命名实用程序,但这次使用正确的方法?不确定是否有其他方法使用BRU。您能建议正确的方法吗?可以使用
Get ChildItem$ScriptDir-Filter*.avi |.
仅尝试重命名avi文件,但是可以,否则就可以了