首页 > 解决方案 > 重命名文件但不明确知道文件扩展名

问题描述

所以我有一个 csv 文件,它有两列,OrigFilename|NewFilename,我有一个包含超过 1k 个文件的目录。问题是,我的列表没有文件扩展名。我将如何在不明确定义文件扩展名的情况下将文件重命名为新文件名,而只使用原始文件名中的扩展名?

这就是我所拥有的,但它需要文件扩展名。我有一个制定哈希表以在其中获取扩展名的问题。

$Renames = Import-csv "C:\Users\admin\Desktop\pull\rename.csv" $TargetDir = "C:\Users\admin\Desktop\pull" $RenHash = @{} $Renames | ForEach-Object { $RenHash[$ .OName]=$ .NName } Get-ChildItem -Path $TargetDir -Recurse -Include $Renames.OName | 重命名项目 -NewName {$RenHash[$_.Name]}

标签: rename

解决方案


这对我有用。请注意,我将 csv 中的标题行从更改为OrigFilename|NewFilenameOrigFilename,NewFilename因此它也像您的文件的其余部分一样以逗号分隔。

我没有测试递归到文件夹或具有相同名称但扩展名不同的文件。

$Renames = Import-csv ".\fromTo.csv" 

$TargetDir = "files" 

$Renames | ForEach-Object { 
  $file = Get-ChildItem -Path $TargetDir -Recurse -Include ($_.OrigFilename + ".*") 
  $ext = [System.IO.Path]::GetExtension($file)
  $newName = $_.NewFilename + $ext;
  Rename-Item  -Path $file -NewName $newName 
} 

推荐阅读