Как мне динамически изменять имена файлов с помощью Rename-Item? - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь использовать командлет 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 ]

3 голосов
/ 07 мая 2019

Может быть, это поможет вам:

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

До: "3_File8_NOT_DONE.sql

После:" 3_File8.sql "

2 голосов
/ 07 мая 2019

Чтобы получить желаемый список, он будет работать с этим решением

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

Обратите внимание, что вы фильтруете Get-ChildItem так, что только файлы переименовываются, когда они начинаются с "3" и заканчиваются на ".sql". Решение @Lndngr удалит «_NOT_DONE» из всех файлов.

...