批量重命名文件 - 从列表中读取旧名称和新名称

时间:2017-03-20 06:19:16

标签: powershell

我有一个需要重命名的文件列表。我需要通过从文件中读取CURRENT NAMENEW NAME(目前在Excel中,但显然可以更改为CSV或其他)来以某种方式执行此操作。

为了更好地解释这一点,一些当前的名字有帐号,有些有申请号,有些有ID号,有些有名字和姓氏。

在Excel中使用UDF和公式我设法从每个文件名中提取足够的数据以使其与我们的数据库匹配,现在我有每个人的ID号 - 我需要将文件命名为ID号,这样我们就可以了将其上传到我们的系统,它可以正确编入索引。

因此,我需要PS来阅读file_list.txt,然后根据列表中的CURRENT NAME找到该文件,并将其重命名为列表中的NEW NAME

我知道如何通过分配标准名称和序列号(此站点上有许多此类帖子)批量重命名文件,但不知道如何从文件中读取名称。

3 个答案:

答案 0 :(得分:3)

使用包含两列的CSV PathNewName

Path,NewName
"C:\folder\ABC123.txt","ID001.txt"
"C:\another_folder\RandomFile001.txt","ID002.txt"

(只要在Powershell中使用匹配的名称,列名就可以是任何东西)

您可以使用foreach循环浏览CSV中的项目并重命名:

Import-Csv "C:\folder\file_list.txt" | foreach { Rename-Item -Path $_.Path -NewName $_.NewName }

答案 1 :(得分:0)

如果您使用Get-ChildItem cmdlet检索文件,则会在Name属性中找到文件名:

Get-ChildItem | Rename-Item -NewName { # use $_.Name to get the new name from your list }

您可以使用Get-Content cmdlet或Import-CSV(如果是CSV文件)阅读file_list.txt。

答案 2 :(得分:0)

我一直在研究这个问题,但我总是喜欢把事情做得更好。 这个简短的sciprt所做的是抓取目录和子目录中的所有文件并重命名它们。

创建可用于所有功能的全局变量。

Function Variables{
$Global:CreateListFile="F:\RemoveFiles\"
$Global:ListofFilesCSV="F:\FileList.csv"
$Global:ListofFilesCSV_NewName="F:\FileList2.csv"
$Global:RenameCSV="F:\Rename.csv"
}

创建我们要重命名的文件/目录列表。然后我们让PowerShell打开Excel并允许您编辑CSV。关闭后,脚本将重新开始。

Function CreateList{
# Create List File using .Csv
Get-ChildItem $Global:CreateListFile -Recurse | Select FullName | Export-Csv $Global:ListofFilesCSV -NoTypeInformation
#Get-Content $Global:ListofFilesCSV
}

现在使用已编辑的列表,我们现在可以设置我们想要重命名结构的内容。

Function CreateRenameList{
$File = Import-CSV $Global:ListofFilesCSV
$File2 = Import-CSV $Global:ListofFilesCSV
$i = 0
$File | ForEach `
{
  $_ | Add-Member -type NoteProperty -name NewName -value $File2[$i].FullName
  $i++
}
$File | Export-CSV $Global:RenameCSV -notype
#Get-Content $Global:RenameCSV
(Start-Process EXCEL "$Global:RenameCSV" -PassThru).WaitForExit()
}

现在,重命名列表已经完成,我们现在可以重命名我们想要的文件。

Function Rename{
Import-Csv $Global:RenameCSV | 
ForEach { Rename-Item -Path $_.FullName -NewName $_.NewName }
}

调用函数

Function GOGO{
Variables
CreateList
CreateRenameList
Rename
}
GOGO