Jak uzyskać dostęp do ścieżek plików w PowerShell zawierających znaki specjalne?
Dzwonię do aplikacjihellhell z poziomu aplikacji Java (poprzez wiersz poleceń systemu Windows), aby odczytać różne atrybuty plików.
na przykład
powershell (get-item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
Ścieżkę do pliku umieszczam w pojedynczych cudzysłowach, ponieważ może zawierać spacje. Działało dobrze, dopóki nie natrafiłem na ścieżkę do pliku zawierającą nawiasy kwadratowe, które wydają się być interpretowane jako znak wieloznaczny. Udało mi się go rozwiązać, dodając-literalPath parametr:
powershell (get-item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
Do tej pory tak dobrze ... Ale ścieżki do plików mogą również zawierać pojedyncze cudzysłowy, znaki dolara, znaki ampersand, ... i wszystkie te znaki wydają się mieć określoną funkcję w PowerShell, dla której-literalPath parametr nie działa. Próbowałem zamknąć ścieżkę podwójnymi cudzysłowami lub uciec znakiem `, ale to nie rozwiązało mojego problemu :-(
Wszelkie sugestie dotyczące przekazywania ścieżki do pliku PowerShell, która może zawierać spacje, pojedyncze cudzysłowy, nawiasy kwadratowe, znaki handlowe, znaki dolara itp.?
Aktualizacja: Ktoś tutaj już pokazał mi, jak to działa z poziomu Powershell, ale jakoś odpowiedź została usunięta?
W każdym razie stworzyłem plik o nazwie$ & ' [].txt
. To działaw ciągu Powershell (potrzebny do ucieczki z &):
PS C:\Users\erlpm> Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
Directory: C:\Users\erlpm\Desktop\Temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2012-08-23 14:22 0 $ & ' [].txt
Ale kiedy wykonam to samo polecenie Powershell w wierszu polecenia systemu Windows, ...
C:\Users\erlpm>powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
... Dostaję ten błąd:
Ampersand not allowed. The & operator is reserved for future use; use "&" to pass ampersand as a string.
At line:1 char:55
+ Get-Item -LiteralPath C:\Users\erlpm\Desktop\Temp\`$ & <<<< ' [].txt
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : AmpersandNotAllowed
Używając-command
parametr i umieszczenie polecenia Powerhell{}
podaje dokładnie ten sam komunikat o błędzie ...
C:\Users\erlpm>powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}