我想根据CSV文件中的关键字重命名文件和文件夹。
CSV包含搜索和替换组成文件和文件夹名称的关键字。
Search | Replace Document | DTX Processing | PRX Implementation | IMX ...
我看过这些帖子来帮助我:
Using Powershell to recursively rename directories using a lookup file
powershell script to rename all files in directory
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作为查找或参考文件递归搜索和替换文件和文件夹名称。
答案 0 :(得分:3)
当您需要按其他值查找值时,通常的go-to数据结构是字典,或者在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
}
}
答案 1 :(得分:0)
$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"} }
替换处理正则表达式,因此您需要确保正确转义任何特殊字符。