【问题标题】:Rename Files but do not explicitly know the file extension重命名文件但不明确知道文件扩展名
【发布时间】:2021-01-14 14:58:57
【问题描述】:

所以我有一个包含两列 OrigFilename|NewFilename 的 csv 文件,并且我有一个包含超过 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]}

【问题讨论】:

  • 你有什么工具?假设您在 Windows 上,您可以编写 PowerShell 吗?你知道什么编程语言?
  • 这是我所拥有的,但它迫使我定义文件分机。 $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]}
  • 对不起,我问的是你作为程序员的能力。如果您了解 PowerShell(并且在 Windows 计算机上),我们可以在 PowerShell 中给出答案。如果没有,但你懂 C#,我们可以用 C# 等回答。
  • 我的错,windows 和 PS 都很棒!
  • 非常感谢任何帮助。

标签: rename


【解决方案1】:

这对我有用。请注意,我将 csv 中的标题行从 OrigFilename|NewFilename 更改为 OrigFilename,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 
} 

【讨论】:

  • 谢谢...我真的需要加入所有的 ps 对象。阅读您开发的内容非常有意义...谢谢!!!
猜你喜欢
  • 2013-02-12
  • 2016-12-06
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
相关资源
最近更新 更多