Я хочу удалить рекурсивно квадратные скобки из имен файлов - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть много файлов в каталоге, содержащих квадратные скобки, например:

Filename 1 [12454365].txt

Я попробовал следующий скрипт, но он выдает ошибку.

get-childitem -recurse | foreach { move-item -literalpath $_.name ($_.name -replace '\[.*\]', '')}

Сообщение об ошибке

move-item : A device attached to the system is not functioning.

Хотите снять только квадратные скобки, а не все, что между ними!

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Если вы укажете -Recurse, вам нужно будет указать файл с FullName, поскольку он будет нацелен не на текущий каталог.

(Get-ChildItem -File -Recurse) | foreach {
    $dest = Join-Path $_.DirectoryName ($_.Name -replace "[\[\]]")
    Move-Item -LiteralPath $_.FullName $dest
}

Кроме того, лучше использовать Rename-Item для переименования файлов.

(Get-ChildItem -File -Recurse) | Rename-Item -NewName { $_.Name -replace "[\[\]]" }
0 голосов
/ 16 апреля 2019

Я считаю, что проблема в том, что вы заменяете скобки и все, что находится между ними.

Get-ChildItem * -Filter "*`[*`]*" | Rename-Item -NewName { $_.name -replace '\[','' -replace '\]','' }
...