以特定方式重命名文件。目标符号之间的第 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
现在我需要一个脚本来重命名文件以保持原始名称,除了:
- 它会截掉结尾的 (blabla_blabla_blabla_blabla) 部分。
- 将blabla前的12345改为随机5个字符(也可以是数字)
- 将 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 }
提前为一个有点模糊的问题道歉(没有编码进度)。
我有文件(它们可以是 .csv,但没有 .csv,但我可以通过脚本轻松添加)。文件名是这样的:
TRD_123456789_ABC123456789_YYMMDD_HHMMSS_12345678_12345_blabla_blabla_blabla_blabla
现在我需要一个脚本来重命名文件以保持原始名称,除了:
- 它会截掉结尾的 (blabla_blabla_blabla_blabla) 部分。
- 将blabla前的12345改为随机5个字符(也可以是数字)
- 将 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 }