我正在尝试找到两个文件:
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”
答案 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.Replace
和Rename-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) }