以特定方式重命名文件。目标符号之间的第 n 个字符串

Rename files in a specific way. Target nth string between symbols

提前为一个有点模糊的问题道歉(没有编码进度)。

我有文件(它们可以是 .csv,但没有 .csv,但我可以通过脚本轻松添加)。文件名是这样的:

TRD_123456789_ABC123456789_YYMMDD_HHMMSS_12345678_12345_blabla_blabla_blabla_blabla

现在我需要一个脚本来重命名文件以保持原始名称,除了:

  1. 它会截掉结尾的 (blabla_blabla_blabla_blabla) 部分。
  2. blabla前的12345改为随机5个字符(也可以是数字)
  3. 将 HHMMSS 的时间戳更改为当前的时、分、秒。

关于第 3 点。我认为我可以将任意 powershell 脚本插入到“”引号中的任何字符串。所以在重命名文件时,我想我可以添加

Rename-Item -NewName {... + $(get-date -f hhmmss) + ...}

但是,我不知道如何编写重命名第 4 个和第 5 个 _ 符号之间的部分的重命名脚本。并删除第 7 个 _ 符号后的字符串部分。

有人可以帮助我编写脚本或帮助我如何在第 N 个符号之间的 powershell 脚本目标字符串吗?

亲切的问候, 卡米尔.

拆分字符串 _:

$string = 'TRD_123456789_ABC123456789_YYMMDD_HHMMSS_12345678_12345_blabla_blabla_blabla_blabla'

$parts = $string -split '_'

然后丢弃除前 6 个子字符串以外的所有子字符串(例如,删除 12345 部分及其后的任何内容):

$parts = $parts[0..5]

现在添加您的随机 5 位数字:

$parts = @($parts; '{0:D5}' -f $(Get-Random -Maximum 100000))

更新索引 4 处的字符串(HHMMSS 字符串):

$parts[4] = Get-Date -Format 'HHmmss'

最后再次将所有子字符串与 _ 连接在一起:

$newString = $parts -join '_'

将它们放在一起,您可以编写一个不错的小辅助函数:

function Get-NewName {
  param(
    [string]$Name
  )

  # split and discard
  $parts = $Name -split '_' |Select -First 6

  # add random number
  $parts = @($parts; '{0:D5}' -f $(Get-Random -Maximum 100000))

  # update timestamp
  $parts[4] = Get-Date -Format 'HHmmss'

  # return new string
  return $parts -join '_'
}

然后做:

Get-ChildItem -File -Filter TRD_* |Rename-Item -NewName { Get-NewName $_.Name }