通过循环遍历 .txt / .csv 文件中的名称列表以进行部分匹配,重命名目录中的多个文件

Rename multiple files in a directory by looping through a list of names in a .txt / .csv file for a partial match

我正在尝试自动重命名 Windows 7 目录中的多个文件。我需要搜索源索引文件(.txt 或 .csv,这是一个扩展文件名列表),并且在与原始文件名部分匹配的地方,复制前 12 个字符(索引中相关字符串的文件)并相应地重命名原始文件(并保留原始文件扩展名)。

例如

(a) 当前在Windows目录下的文件命名如下(数百个文件):

(b) .txt/.csv 文件中的值如下(数百个值 - 注意:这些没有文件扩展名):

(c) Desired Result is for the files to be auto renamed as follows:

[通过在 (a) 中的值列表中搜索 (a) 中的文件名,如果匹配,返回前 12 个字符作为新文件名,同时保留原始文件扩展名]

注意:我的偏好是使用 .txt 格式的索引文件进行查找。但是有需要我也可以使用 .csv

我以前从未使用过 PowerShell,并且是 Windows 批处理脚本的新手。我四处搜索并试图将代码片段拼凑成一个 Windows 批处理脚本(也尝试了一个 PowerShell 脚本)来实现这一点,但我在这方面的知识严重缺乏所以不幸的是我仍在努力一.

如有任何帮助,我们将不胜感激。提前谢谢你。

P.S。这是我尝试运行但无济于事的 PowerShell 脚本。

$fdPath = 'C:\TEST\Data'
$sourcelistFiles = Get-ChildItem -Path $FDPATH\*.txt | ForEach-Object {$_.user } FullName
$findReplaceList = Import-Csv -Path $FDPATH\AllNames.csv


$totalitems = $sourcelistFiles.count
$currentrow = 0
foreach ($sourcelistFile in $sourcelistFiles)
{
    $currentrow += 1
    Write-Progress -Activity "Processing record $currentrow of $totalitems" -Status "Progress:" -PercentComplete (($currentrow / $totalitems) * 100)

    [string] $txtSourceListFile = Get-Content $sourcelistFile | Out-String

    ForEach ($findReplaceItem in $findReplaceList)
    {
        $txtSourceListFile = $txtSourceListFile -replace "$($findReplaceitem.FindString)", "$($findReplaceitem.ReplaceString)"
    }
    
    $txtSourceListFile | Set-Content ($sourcelistFile)
 -NoNewLine
}
$FDPATH = 'C:\TEST\Data'
foreach($obj in (Import-Csv -Path $FDPATH\AllNames.csv)){
  foreach($thing in $(gci -Path $FDPATH\*.txt)){
    if("123.hash.avocado" -match $thing.basename){$ret = $thing.fullname}
  }
  $stuff = $obj -split "."
  ren -Path $ret -NewName $stuff[0]
}

看看这是否可行,它遍历 csv 然后遍历目录以查看目录的名称是否在正在迭代的 csv 行中,然后将变量设置为文件的全名并重命名它句号前的名字。

Import-CSV LISTA.csv -Header 新文件名 | % { Copy-Item -Path archivo_convert.pdf -Destination "$($_.newfilename).pdf" }