代码之家  ›  专栏  ›  技术社区  ›  John McElreavey

找到一个包含特定字符串的文件,并将其重命名,但保留扩展名[duplicate]

  •  0
  • John McElreavey  · 技术社区  · 6 年前

    我在找两个文件,叫做:

    bitbucket_20181013.bak
    bitbucket_20181013-237823-23.tar
    

    我试图使用日期扩展名“20181013”查找这些文件,并将其重命名为“{todaysDate}u bitbucket\ubackup.{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.扩展“而不是”20181014_Bitbucket_备份.bak"

    3 回复  |  直到 6 年前
        1
  •  0
  •   G42    6 年前

    改变 $_.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.
    
        2
  •  0
  •   Avshalom    6 年前

    我不确定我是否理解您的意思,但是如果您说得对的话,您希望更改包含字符串“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)) 
    }
    
        3
  •  0
  •   Mike Twc    6 年前

    我认为在定义“新名称”时不需要嵌入变量。我还建议使用别名。

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