Wie der Zugriff auf die Datei-Pfade in der Powershell mit Sonderzeichen?
Ich bin Aufruf von powershell innerhalb einer Java-Anwendung (durch die Windows-Eingabeaufforderung) zum Lesen von verschiedenen Datei-Attribute.
z.B.
powershell (get-item 'C:\Users\erlpm\Desktop\Temp\s p a c e s.txt').creationTime
Ich lege den Pfad der Datei in einfachen Anführungszeichen, weil Leerzeichen enthalten kann.
Es funktionierte gut, bis stieß ich auf ein Datei-Pfad mit eckigen Klammern, die zu sein scheinen interpretiert als ein Platzhalter. Ich konnte es lösen, indem die -literalPath parameter :
powershell (get-item -literalpath 'C:\Users\erlpm\Desktop\Temp\brackets[].txt').creationTime
So weit, So gut ...
Aber Dateipfade enthalten auch einfache Anführungszeichen, Dollarzeichen, kaufmännisches, ... und alle diese Zeichen scheinen zu haben eine spezifische Funktion in der powershell für die die -literalPath parameter scheint nicht zu funktionieren.
Ich habe versucht, umschließt den Pfad mit doppelten Anführungszeichen oder die Flucht mit dem ` - Zeichen, aber das hat mein problem nicht lösen: - entweder(
Irgendwelche Vorschläge auf, wie Sie passieren einen Datei-Pfad zur Powershell was kann die Leerzeichen enthalten, Anführungszeichen, eckige Klammern, kaufmännisches und, dollar-Zeichen, etc. ?
Update:
Jemand hier schon zeigte mir, wie um es zu bekommen arbeiten in Powershell, aber irgendwie ist die Antwort entfernt wurde ?
Wie auch immer, ich Tat, erstellen Sie eine Datei namens $ & ' [].txt
.
Diese arbeiten bilden innerhalb Powershell (wird benötigt, um die Flucht der &) :
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
Aber wenn ich ausführen die gleichen Powershell-Befehl durch die Windows-Eingabeaufforderung, ...
C:\Users\erlpm>powershell Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"
... Ich bekomme diese Fehlermeldung :
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
Mithilfe der -command
parameter und setzen Sie den powershell-Befehl zwischen {}
gibt genau die selbe Fehlermeldung ...
C:\Users\erlpm>powershell -command {Get-Item -LiteralPath "C:\Users\erlpm\Desktop\Temp\`$ & ' [].txt"}
Ich aktualisiert meine Frage und fügte einige funktionierende und nicht-funktionierende Beispiele. Wie Sie sehen können, kann ich es auf der Arbeit innerhalb der Powershell-Eingabeaufforderung, aber nicht durch executng powershell über die Windows-Eingabeaufforderung.
Ich reproduzierte, Ihr Problem durch erstellen einer Datei namens "$ * ' [].txt". Dann, von einem powershell-Eingabeaufforderung die Eingabe von get-item <tab> und powershell abgeschlossen, die mit dem Namen für mich, aber ich kann nicht fügen Sie abgeschlossen mit dem Namen hier, weil markdown frisst alle Sonderzeichen. Probieren Sie es aus und sehen, ob das hilft.
InformationsquelleAutor jeroen_de_schutter | 2012-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie können schreiben Sie den Pfad in eine temporäre txt-Datei, die folgenden Werke OK:
Die Datei @ C:\Temp\path.txt enthält den Pfad mit Sonderzeichen in der es, anders als dieser, ich glaube, Sie hätte zu entkommen, jedes Sonderzeichen auf einer pro-Pfad-basis.
Zusätzlich zu dem hack oben, es erscheint Powershell V3 kann helfen, hier mit dem Zusatz von einem neuen "magischen parameter' Sprache-Funktion. Sehen Sie insbesondere den Abschnitt Leitung 'einfache Wiederverwendung von Kommando-Zeilen Aus Cmd.exe' hier und weil ich es hasse link-rot, hier ist es, schamlos nachstehend wiedergegeben:
InformationsquelleAutor nimizen
Dies ist wirklich eine Frage, über cmd.exe string Flucht, dann. Die Kombination cmd-und powershell-string-escaping ist ein totaler Albtraum. Nach ein paar versuchen, ich habe Ihre konkreten Beispiel zu arbeiten:
Völlig intuitiv, richtig?
Verbringen Sie 15 min Ringen mit escape-Sequenzen zu jeder Zeit, oder Sie können versuchen, einige andere appraoches.
Setzen Sie die Dateinamen in eine text-Datei, und Lesen Sie es von dort.
oder
Ein Skript verwenden,
oder
Verwenden -EncodedCommand
Sehen
powershell.exe -?
(im letzten Artikel gezeigt) oder http://dmitrysotnikov.wordpress.com/2011/07/06/passing-parameters-to-encodedcommand/InformationsquelleAutor latkin
Dieser thread ist 5 Jahre alt, also vielleicht haben sich die Zeiten geändert, aber die Antwort, die für mich gearbeitet wurde die Verwendung des backtick ( ` ) - symbol, um die Flucht der ganz besonderen Charakter.
In meinem Fall war es ein dollar-Zeichen in ein Verzeichnis-Pfad, war ein Fehlschlag. Indem Sie ein einfaches schließendes Anführungszeichen, bevor Sie die dollar-Zeichen, funktionierte alles.
Bevor:
Nach:
InformationsquelleAutor Flat Cat