重命名文件和文件夹关键字 - 使用 CSV 查找文件



我想根据CSV文件中的关键字重命名文件和文件夹。

CSV保存搜索和替换关键字,这些关键字将构成文件和文件夹名称。

搜索|替换文档|DTX处理|PRX实施|IMX…
  • 并非所有文件名都包含文件名中的每个单词
  • 并非所有文件夹都会在文件夹名称中包含每个单词
  • Powershell必须搜索子项目,即文件夹和文件姓名
  • 如果找到单词(匹配)-从CSV替换

我看了这些线索来帮助我:

使用Powershell使用查找文件递归重命名目录

powershell脚本重命名目录中的所有文件

http://code.adonline.id.au/batch-rename-files/

我只管理了以下片段

$folder = "C:Folders"               #target folder containing files
$csv    = "C:FileNameKeywords.csv"             #path to CSV file
cd ($folder);
Import-Csv ($csv) | foreach {
  Rename-Item -Path $_.Path -NewName $_.Filename
}

它一次只替换一个。

问题:

如何使用CSV作为查找或引用文件递归搜索和替换文件名和文件夹名。

当您需要按其他值查找值时,通常的数据结构是字典,或者PowerShell术语中的哈希表。将你的CSV读入这样的字典:

$keywords = @{}
Import-Csv $csv | ForEach-Object {
  $keywords[$_.Search] = $_.Replace
}

然后遍历你的文件夹树,通过用各自的值替换每个键来构建新的文件名:

Get-ChildItem $folder -Recurse | ForEach-Object {
  $newname = $_.Name
  foreach ($word in $keywords.Keys) {
    $newname = $newname.Replace($word, $keywords[$word])
  }
  if ($_.Name -ne $newname) {
    Rename-Item -Path $_.FullName -NewName $newname
  }
}

我会试试的。在这种情况下,我假设搜索和替换是您的标题。除了$folder和.csv变量之外。

$csvobject=import-csv $csv 
Foreach($obj in $csvobject){ 
$search=$obj.search
$replace=$obj.replace
get-childitem path $folder |where{$_.name -like "$($obj.search)"} | rename-item -newname {$_.name -replace "$search", "$replace"} }

replace处理regex,因此u需要确保正确转义任何特殊字符。

最新更新