查找包含某个字符串的文件并重命名,但保留扩展名

时间:2018-10-15 13:52:26

标签: powershell scripting rename wildcard

我正在尝试找到两个文件:

bitbucket_20181013.bak
bitbucket_20181013-237823-23.tar

我正在尝试使用日期扩展名“ 20181013”查找这些文件,并将其重命名为“ {todaysDate} _bitbucket_backup。{ext}”

到目前为止,我有以下内容:

$date = [DateTime]::Nw.ToString("yyyyMMdd")
$file = "*$date*"
$name = "$($date)_Bitbucket_Backup"

Get-ChildItem -Path Microsoft.PowerShell.Core\FileSystem::\\KERGRINFS4\Seagate\Bitbucket_Backups\backups |
    Where-Object { $_.Name -like $file } |
    %{ Rename-Item -LiteralPath $_.FullName -NewName "$name + $_.extension" }

但是它不起作用,它返回:“ 20181014_Bitbucket_Backup + bitbucket_20181014.bak.extension”而不是“ 20181014_Bitbucket_Backup.bak”

3 个答案:

答案 0 :(得分:0)

$_.extension更改为$($_.extension)

"$_.extension"    # Give me string that is $_, then add the literal string .extension to it
"$($_.extension)" # evaluate the expression $_.extension, then give me the results of that as a string.

答案 1 :(得分:0)

我不确定我是否理解您,但是如果您理解正确,您是否要更改包含字符串'20181013'的文件,并使用yyyyMMdd日期格式将其重命名为今天的日期?

您可以在一个命令中使用String.ReplaceRename-Item来提高代码的可读性,请尝试:

$Path = 'Microsoft.PowerShell.Core\FileSystem::\\KERGRINFS4\Seagate\Bitbucket_Backups\backups'
$OldString = 'bitbucket_20181013'
$NewString = "{0}_Bitbucket_Backup" -f [datetime]::now.tostring("yyyyMMdd") 

Get-ChildItem $Path | ? {$_.Name -match $OldString} | 
% {Rename-Item $_.FullName -NewName ($_.Name.Replace($OldString,$NewString)) 
}

答案 2 :(得分:0)

我认为您在定义“新名称”时实际上不需要嵌入变量。我还建议与别名更加一致。

ls | where { $_.Name -like $file } | foreach { ren $_.FullName -NewName ($name + $_.extension) }