【问题标题】:Powershell rename files whilst maintaining the original file orderPowershell 重命名文件,同时保持原始文件顺序
【发布时间】:2021-03-13 03:35:27
【问题描述】:

我有一组格式如下的文件

我想将文件名更改为以下格式

我使用了以下代码:

`$i = 21

目录 | ForEach-对象 {$_ |重命名项目 -NewName ('00816-101998-XX-A-2-50-{0:D3} Detalj.{1}' -f $i++, $_.Extension)}`

此代码以文件名 A.10.11.11 开始重命名 如何让它从第一个文件名开始,即 8.A.10.11.8?

谢谢!

【问题讨论】:

    标签: powershell file rename


    【解决方案1】:

    看你的问题,我想这就是你打算做的。

    当前文件名列表应按文件名开头的整数值排序。

    接下来,您要使用以值 21 开头的计数器重命名它们 为此,您可以使用 ForEach-Object 循环,但 Rename-Item 的 -NewName 参数也可以包含包含要执行的操作的脚本块。

    $i = 21
    (Get-ChildItem -Path 'D:\Test' -Filter '*.pdf' -File) | 
       Sort-Object @{Expression = {[int]($_.Name -split ' ')[0]}} | 
       Rename-Item -NewName { '00816-101998-XX-A-2-50-{0:D3} Detalj{1}' -f $script:i++, $_.Extension }
    

    附:图像显示文件名以数字开头,后跟 空格,而在问题中,您给出了一个示例,其中数字后跟一个点 .。如果您的文件名是这种情况,请将[int]($_.Name -split ' ')[0] 更改为[int]($_.Name -split '\.')[0]

    1.我们需要使用$script:i 范围语法来寻址和增加计数器$i 的值,否则NewName 脚本块中不存在$i
    2.为避免两次重命名文件,请将代码中的Get-ChildItem部分括在括号之间

    【讨论】:

      【解决方案2】:
      param(
          $directory = "d:\tmp",
          [regex]$rx = "(?<=8.A.10.11.)\d+",
          [string]$newPrefix = "00816-101998-XX-A-2-50-"
      )
      <# 
      8..20 | ForEach-Object {
          $filePath = Join-Path $directory -ChildPath "8.A.10.11.$_.pdf"
          Out-File -InputObject "some text" -FilePath $filePath -Encoding default
      }
      #>
      
      Get-ChildItem $directory | ForEach-Object{
          Rename-Item $_.FullName -NewName "$newPrefix$((($rx.Matches($_.BaseName)).value).padleft(3,'0'))$($_.Extension)"
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-31
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多