繁体   English   中英

使用powershell根据另一个文件夹中的文件名批量重命名文件

[英]batch rename files according to filenames in another folder with powershell

我在名为“01-aaa-bbb-ccc”,“02-ddd-eee-fff”的文件夹中有大量文件,依此类推。 在另一个文件夹中,我有一个没有索引的相同文件的早期版本(手动添加以便按特定顺序对它们进行排序)“aaa-bbb-ccc”,“ddd-eee-fff”。 我想使用早期版本,但我需要重命名它们添加与其他文件夹中相同的索引。

基本上,如下所示:如果没有索引的文件名相同,则以与文件夹a中的onse相同的方式重命名文件夹b中的文件。

有没有办法在powershell中做到这一点? 不幸的是,我的技能还不够好。 谢谢您的帮助!

这是一种类似的方法。 适用于我的一小部分测试:

$newNames = Get-ChildItem ..\a -Name
# Cd into b dir
Get-ChildItem | Foreach {$name = $newNames -match "\d+-$_";if ($name){$_}} | 
                Rename-Item -NewName {$name}
$ht = @{}
Get-ChildItem a\* | Select-Object -ExpandProperty name | ForEach-Object {
  $null = $_ -match '(\d+)-(.*)'
  $ht[$Matches[2]] = $Matches[1]
}
Get-ChildItem b\* | ForEach-Object { Rename-Item $_ ($ht[$_.name] + '-' + $_.name) }

首先,我创建一个哈希表,其中包含没有索引的文件名到要使用的索引的映射。 然后,这用于相应地重命名文件夹b中的项目。

Get-ChildItem .\a\* | Select -Expand Name | %{ $_ -match "([\d]+)-(.+)" }  | `
%{ Rename-Item -WhatIf .\b\$($matches[2]) $matches[0] }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM