2011-12-26 12 views
10

Istnieje dziwne zachowanie w programie PowerShell, gdy na ścieżce znajdują się nawiasy kwadratowe. Na przykład, jeśli jesteś w folderze:Dziwne zachowanie z nawiasami w ścieżce

C:\Some Movie [2011] 

który zawiera plik mkv i wpisać:

ls *.mkv 

nic nie jest zwracana! Myślę, że problem polega na tym, że PowerShell próbuje zrobić coś takiego:

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

która nie dlatego [2011] uważany jest wieloznaczny. Udało mi się sprowadzaniu wszystko mkv z takiego folderu za pomocą następującego polecenia:

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

ale gdy próbuję nakarmić te wyniki w poleceniu Zmień nazwę-element zawiedzie.

Get-ChildItem -LiteralPath 'C:\Some Movie [2011]' -Include *.mkv | Rename-Item -NewName "movie.mkv" 

Te same operacje w folderze bez nawiasów działają bezproblemowo. Jakieś pomysły?

+0

Co zrobić, jeśli folder zawiera więcej niż jeden plik mkv? Nie możesz zmienić ich wszystkich na movie.mkv. –

+0

Tak, mam tylko jeden plik 'mkv', po prostu nie znam jego nazwy, więc potrzebuję symbolu wieloznacznego. – lalibi

Odpowiedz

7

Zobacz mój komentarz na twoje pytanie (powyżej). to zadziała, jeśli będziesz oczekiwał, że w tym folderze jest tylko jeden plik mkv. Rename-Item nie obsługuje programu LiterlPath (poprawionego w wersji 3), można odwołać się do .NET. Polecam również (gdy filtrujesz tylko jedno rozszerzenie), aby użyć opcji -Filtr zamiast Uwzględnij, działa szybciej.

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) 
} 
+0

To działa pięknie. Dziękuję Ci. – lalibi

+0

+ 1 dobra robota, to naprawdę proste. – Aaron

4

Znany błąd w cmdletu Rename-Item that doesn't handle filenames with brackets. W łączu przewiń do "Wysłane przez Microsoft w dniu 2010-01-29".

Zamiast tego można użyć polecenia cmdletu Move-Item, ponieważ Move-Item ma opcję "-LiteralPath". Połów jest jednak taki, że najwyraźniej działa tylko wtedy, gdy nazwa katalogu nie zawiera nawiasów, co nie brzmi tak, jakby pomogło to twojemu przypadkowi.

Nie jestem pewien, ale można spróbować czegoś podobnego z DOS (cmd). W przeciwnym razie możesz utknąć w wykonywaniu nazw w języku .Net, ponieważ na pewno możesz to zrobić.

Wygląda na to, że Microsoft właśnie wydał Powershell 3.0 kilka dni temu. Bez obietnic, ale możesz spróbować zainstalować i sprawdzić, czy udało się naprawić błąd.

+0

Dzięki za wskazanie nowej wersji. – lalibi