Странное поведение со скобками в пути - PullRequest
11 голосов
/ 26 декабря 2011

В PowerShell странное поведение, когда в пути есть квадратные скобки.Например, если вы находитесь в папке:

C:\Some Movie [2011]

, которая содержит файл mkv, и вы вводите:

ls *.mkv

ничего не возвращается!Я думаю, что проблема заключается в том, что PowerShell пытается сделать что-то вроде:

Get-ChildItem 'C:\Some Movie [2011]\*.mkv'

, что не удается, потому что [2011] считается подстановочным знаком.Мне удалось извлечь все mkv из такой папки с помощью следующей команды:

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv

, но когда я пытаюсь передать эти результаты командой Rename-Item, происходит сбой.

Те же операции в папке без скобок выполняются без проблем.Есть идеи?

Ответы [ 2 ]

8 голосов
/ 26 декабря 2011

См. Мой комментарий к вашему вопросу (выше).это будет работать, если вы ожидаете, если в этой папке только один файл mkv.Rename-Item не поддерживает LiterlPath (исправлено в v3), вы можете прибегнуть к .NET.Я также рекомендую (когда вы фильтруете только одно расширение) использовать -Filter вместо Include, он работает быстрее.

Get-ChildItem -LiteralPath 'D:\Some Movie [2011]' -Filter *.mkv | Foreach-Object{
    $NewName = Join-Path -Path $_.DirectoryName -ChildPath 'movie.mkv'
    [System.IO.File]::Move($_.FullName,$NewName)
}
4 голосов
/ 26 декабря 2011

В командлете Rename-Item есть известная ошибка, которая не обрабатывает имена файлов в скобках .В ссылке прокрутите вниз до пункта «Опубликовано Microsoft 29.01.2010».

Обходной путь - использовать вместо этого командлет Move-Item, так как Move-Item имеет «-LiteralPath».вариант.Однако подвох заключается в том, что он, очевидно, работает только в том случае, если имя каталога не содержит скобок, что не похоже на то, что оно поможет вам.

Я не уверен, но вы можете попробовать нечто подобноеиз DOS (cmd).В противном случае вы можете застрять в выполнении переименований из языка .Net, поскольку вы определенно можете заставить его работать там.

Похоже, Microsoft только что выпустила Powershell 3.0 несколько дней назад.Никаких обещаний, но вы можете попробовать установить его и посмотреть, удалось ли им исправить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...