Переименование файлов в куче подпапок - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий код, но он переименовывает папки и файлы. Когда я использую базовое имя, он говорит, что файл, я получаю сообщение об ошибке, в котором говорится, что исходный и целевой путь должен отличаться.

Я хочу переименовать sd ^ fks.pdf в sd_fks.pdf

Get-ChildItem $dstpath -Recurse | `
Where-Object {$_.Name -match '^'} | `
Rename-Item -NewName { $_.Name -replace '^','_' }

Ответы [ 3 ]

0 голосов
/ 10 апреля 2020

Для этого вам не нужно предложение Where-Object. Вместо этого используйте Filter, что ускоряет выполнение кода:

Get-ChildItem -Path $dstpath -Filter '*^*' -Recurse -File | Rename-Item -NewName { $_.Name -replace '\^','_' }
0 голосов
/ 10 апреля 2020

В случае сомнений, regex escape:

[regex]::escape('^')

\^

'^' означает 'начало строки в регулярном выражении:

'hi' -replace '^','prefix-'

prefix-hi

Или вставьте выражение в https://regex101.com и посмотри, что там написано.

0 голосов
/ 10 апреля 2020

Побег из кругового символа. Придерживайтесь атрибута Name. Возможно, вы захотите добавить -File к Get-ChildItem, чтобы получить только файлы:

Get-ChildItem $dstpath -File -Recurse | Where-Object {$_.Name -match '\^'} | Rename-Item -NewName {$_.Name -replace '\^','_'}
...