如何在Powershell中使用CSV索引替换整个文件名?

时间:2018-03-16 12:22:48

标签: powershell

当从通话录音网站下载.mp3文件时,它们不是我们想要的格式。我想替换整个文件名并将文件移动到新文件夹中。默认格式为:

incoming#_outgoing#_yyyymmdd_hhmmss

我有一个搜索和替换CSV,它使用来自通话录音网站的数据:

替换:电话呼叫参考(TelCall_yyyymmdd_Surname)

搜索:来自通话录音软件的确切通话时间(yyyymmdd_hhmmss)

我编写了一个脚本,在文件名中搜索确切的时间和日期,并用所需的格式替换它:

    $folder = "C:\Users\R\Desktop\ClientCallsTest"
    $csv = "C:\Users\R\Desktop\20180104-0224_Client_Calls_PS_CSV.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
      }
    }

它确实重命名了文件,但只替换了CSV表中的字符串。我想要的格式只是TelCall_yyyymmdd_Surname。

如何修改此代码以替换整个文件名(删除开头的传入/传出号码),而不仅仅是查找表中的字符串?我确定这是一个快速的改变,但我很难过。

1 个答案:

答案 0 :(得分:1)

您可以使用字符串Split()功能将原始名称拆分为多个部分,例如:

$nameParts = "incoming#_outgoing#_yyyymmdd_hhmmss" -split "_"

将为您提供如下数组:

PS C:\>$nameParts
incoming#
outgoing#
yyyymmdd
hhmmss

然后你可以组装你现在的字符串,如:

$newName = "TelCal_" + $nameParts[2] + "_" + $surename

其中$surename包含来自csv文件的数据