在 powershell 或命令提示符中重命名多个文件的文件名部分

在 powershell 或命令提示符中重命名多个文件的文件名部分

我有数百个文件,其名称如下:

MOD15A2H.A2012001.h26v06.001.2015230181014_LAI500m.tif
MOD15A2H.A2012009.h26v06.001.2015236194306_LAI500m.tif
MOD15A2H.A2012017.h26v06.001.2015237120626_LAI500m.tif
MOD15A2H.A2012025.h26v06.001.2015237124147_LAI500m.tif
MOD15A2H.A2012033.h26v06.001.2015237131607_LAI500m.tif
MOD15A2H.A2012041.h26v06.001.2015237232610_LAI500m.tif
MOD15A2H.A2012049.h26v06.001.2015238141341_LAI500m.tif
MOD15A2H.A2012057.h26v06.001.2015238172148_LAI500m.tif
MOD15A2H.A2012065.h26v06.001.2015238191713_LAI500m.tif
MOD15A2H.A2012073.h26v06.001.2015238174737_LAI500m.tif
MOD15A2H.A2012081.h26v06.001.2015239174812_LAI500m.tif
MOD15A2H.A2012089.h26v06.001.2015240024933_LAI500m.tif
MOD15A2H.A2012097.h26v06.001.2015240043222_LAI500m.tif
MOD15A2H.A2012105.h26v06.001.2015240142201_LAI500m.tif
MOD15A2H.A2012113.h26v06.001.2015240161909_LAI500m.tif

我需要将它们重命名为

L2012001.tif
L2012009.tif etc.,

我正在尝试通过 Powershell 命令批量重命名它们到目前为止,我在 powershell 中"MOD15A2H.A"使用以下命令"L"将其替换".h26v06.001."""

>get-childitem -recurse | rename-item -newname {$_.name -replace 'MOD15A2H.A','L'}
>get-childitem -recurse | rename-item -newname {$_.name -replace '.h26v06.001.',''}

现在,请给我一些建议,关于删除所有文件名称中不同的剩余部分。

答案1

如果我在特定目录中有 10 个文件,它们都是 .txt 文件,并且我想将扩展名更改为 .xml,我可以导航到该目录,然后输入:

ren *.txt *.xml

答案2

答案3

尝试这个(你需要在正则表达式中用反斜杠转义点):

Get-Childitem -recurse | Foreach {
  Get-Item $File.Fullname | Rename-Item {$_.name -replace 'MOD15A2H\.A','L'}
  Get-Item $File.Fullname | Rename-Item {$_.name -replace '\.h26v06\.001\.',','}
}

答案4

您可以尝试使用Get-ItemSplitforeach

get-childitem "F:\MOD15A2H_GTiFF\LAI\*.tif" -recurse |  % { rename-item $_.fullname -newname ('L'+$_.name.split('A.*/')[3]+$_.Extension) -WhatIf } 
  • 或者,使用别名...
gi "F:\MOD15A2H_GTiFF\LAI\*.tif" | % { ren $_.fullname -new ('L'+$_.name.split('.A*/')[-6]+$_.Extension) -WhatIf }
  • 您的输出使用-WhatIf
What if: Performing the operation "Rename File" on target "Item: F:\MOD15A2H_GTiFF\LAI\MOD15A2H.A2012001.h26v06.001.230181014_LAI500m.tif Destination: F:\MOD15A2H_GTiFF\LAI\L2012001.tif".
What if: Performing the operation "Rename File" on target "Item: F:\MOD15A2H_GTiFF\LAI\MOD15A2H.A2012009.h26v06.001.236194306_LAI500m.tif Destination: F:\MOD15A2H_GTiFF\LAI\L2012009.tif".

  • 生成的输出-WhatIf允许您预览执行情况,但要有效地重命名文件,只需将其删除:
get-childitem "F:\MOD15A2H_GTiFF\LAI\*.tif" -recurse |  % { rename-item $_.fullname -newname ('L'+$_.name.split('A.*/')[3]+$_.Extension) -WhatIf}

ls -r "F:\MOD15A2H_GTiFF\LAI\*.tif" | % { ren $_.fullname -new ('L'+$_.name.split('.A*/')[-6]+$_.Extension) -WhatIf}
  • 输出结果
MOD15A2H.A2012001.h26v06.001.230181014_LAI500m.tif    L2012001.tif
MOD15A2H.A2012009.h26v06.001.236194306_LAI500m.tif    L2012009.tif

观察: 对于您的情况,有一种替代方法,由于名称中的字符串是固定的,因此您可以使用子字符串轻松地组成新名称:

      MOD15A2H.A2012001.h26v06.001.2015230181014_LAI500m.tif
'L' +|_________|(10,07)|___________________________________|+ '.tif'          
      MOD15A2H.A2012001.h26v06.001.2015230181014_LAI500m.tif

get-childitem "F:\MOD15A2H_GTiFF\LAI\*.tif" -recurse | % { rename-item $_.fullname -newname ('L'+$_.basename.Substring(10,7)+$_.Extension)}

ls "F:\MOD15A2H_GTiFF\LAI\*.tif" -r|% {ren $_.fullname -new ('L'+$_.basename.Substring(10,7)+'.tif')}

  • 并且您有相同的输出/结果:
What if: Performing the operation "Rename File" on target "Item: F:\MOD15A2H_GTiFF\LAI\MOD15A2H.A2012001.h26v06.001.230181014_LAI500m.tif Destination: F:\MOD15A2H_GTiFF\LAI\L2012001.tif".
What if: Performing the operation "Rename File" on target "Item: F:\MOD15A2H_GTiFF\LAI\MOD15A2H.A2012009.h26v06.001.236194306_LAI500m.tif Destination: F:\MOD15A2H_GTiFF\LAI\L2012009.tif".

相关内容