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

How do i dynamically change file-names with Rename-Item?

我正在尝试使用 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 的最后一部分使用正则表达式。或者也许有另一种方法可以使新名称保留其原始名称的一部分?

也许这会对您有所帮助:

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

之前:“3_File8_NOT_DONE.sql

之后:“3_File8.sql”

要获得您想要的列表,它可以使用此解决方案

Get-ChildItem C:\temp\test*.sql | Rename-Item -NewName {$_.Name -replace "_NOT_DONE", ""}

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