PowerShell переименовать элемент не может переименовать

Мой скрипт PowerShell:

$dst = 'C:\Temp'

#Get all folders in $dst
$folders = Get-ChildItem $dst | ?{ $_.PSIsContainer }

foreach($folder in $folders)
{
    $cnt = (Get-ChildItem -filter *.txt $folder | Measure-Object).Count

    $base = ($folder.FullName -split " \[.*\]$")[0]
    $newname = $("{0} [{1}]" -f $base,$cnt)

    Write-Host $folder.FullName "->" $newname

    Rename-Item $folder.FullName $newname
}

Эта проблема

На моем первом запуске я получаю это:

PS C:\Temp> C:\Temp\RenameFolders.ps1
C:\Temp\m1 -> C:\Temp\m1 [1]

На моем втором запуске я получаю это:

PS C:\Temp> C:\Temp\RenameFolders.ps1
C:\Temp\m1 [1] -> C:\Temp\m1 [0]
Rename-Item : Cannot rename because item at 'C:\Temp\m1 [1]' does not exist.
At C:\Temp\RenameFolders.ps1:15 char:5
+     Rename-Item $folder.FullName $newname
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

Я знаю, что проблема в '[' и ']', но я действительно не могу понять, почему.

Может кто-нибудь объяснить мне, почему это проблема?

1 ответ

Решение

Если вы используете PS 3+, добавьте ключ -LiteralPath к вашему переименованию:

Rename-Item -LiteralPath $folder.FullName $newname

иначе использовать Move-Item

Move-Item -LiteralPath $folder.FullName $newname

Powershell не любит квадратные скобки в именах файлов, подробнее в следующем посте:

Это стало проблемой с V2, когда они добавили квадратные скобки в набор символов подстановки для поддержки "blobbing".

От get-help about_wildcards:

Windows PowerShell поддерживает следующие символы подстановки.

Подстановочный знак Описание Пример соответствия Нет соответствия


  • Совпадает с нулем или * A, ag, Apple, банан, больше символов

    ? Точно соответствует? N, in, on выполнил один символ в указанной позиции

    [ ] Соответствует диапазону [al]ook book, cook, look взял персонажей

    [ ] Совпадает с указанным [bc]ook book, символами повара

[ а также ] специальные символы.

Другие вопросы по тегам