如何使用Rename-Item动态更改文件名?

时间:2019-05-07 13:22:03

标签: powershell rename-item-cmdlet

我正在尝试使用cmdlet Rename-Item来更改文件夹中多个文件的文件名。 这是我的文件的一个示例(现实中有更多文件):

1_File1.sql
1_File2.sql
1_File3.sql
2_File4.sql
3_File5_NOT_DONE.sql
3_File6_NOT_DONE.sql
3_File7_NOT_DONE.sql
3_File8_NOT_DONE.sql
4_File9_NOT_DONE.sql
5_File10_NOT_DONE.sql
6_File11.sql
6_File12.sql

我不想做的是从这些文件中删除 _NOT_DONE 部分:

3_File5_NOT_DONE.sql
3_File6_NOT_DONE.sql
3_File7_NOT_DONE.sql
3_File8_NOT_DONE.sql

例如以 3_File

开头的文件

完成后,我将不会显示完整的列表:

1_File1.sql
1_File2.sql
1_File3.sql
2_File4.sql
3_File5.sql
3_File6.sql
3_File7.sql
3_File8.sql
4_File9_NOT_DONE.sql
5_File10_NOT_DONE.sql
6_File11.sql
6_File12.sql

我尝试在powershell中使用它,它会获取所有文件,但是它迫使我将新名称设置为静态名称(请参阅-Replace的最后一部分):

Get-ChildItem *.sql | Rename-Item -NewName {$_.name -Replace '3_File.*_NOT_DONE\.sql$', '<static filename>.sql'}

我也想在-Replace的最后一部分中使用正则表达式。也许还有另一种方法可以使新名称保留其原始名称的一部分?

2 个答案:

答案 0 :(得分:3)

也许这会帮助您:

Get-ChildItem 3_*.sql | Rename-Item -NewName {$_.Name -replace "_NOT_DONE", ""}

之前:“ 3_File8_NOT_DONE.sql

之后:“ 3_File8.sql”

答案 1 :(得分:2)

要获得所需的列表,可以使用此解决方案

[root@x ~]# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
docker.io/openshift/origin-node   v3.11.0             14d965ab72d5        4 days ago          1.17 GB

请注意,您将筛选Get-ChildItem,以便仅当文件以“ 3”开头并以“ .sql”结尾时,文件才被重命名。 @Lndngr提供的解决方案将从所有文件中删除“ _NOT_DONE”。