Ich habe ein Skript, das eine Liste von Pfaden akzeptiert, die als Array von Strings verarbeitet werden sollen. Ich verwende Get-ChildItem
, um diese Pfade zu generieren. Ich bin auf ein interessantes Verhalten bei der Umwandlung von System.IO.FileInfo
Objekten in Zeichenfolgen gestoßen.
Beispiel 1:
%Vor%Beispiel 2:
%Vor%Beispiel 3: (Mit -Recurse, also ist die Umwandlung in Strings unlogisch und nutzlos)
%Vor%Beispiel 4:
%Vor%Das Hinzufügen eines Platzhalters zum Pfad bewirkt, dass die resultierenden Zeichenfolgen vollständige Pfadnamen anstelle von Datei- / Ordnernamen sind. Warum passiert das?
Ich verstehe wie Ich kann dieses Verhalten umgehen und bekomme die Informationen, die ich brauche; Was mich interessiert, ist warum das passiert, da wir nur die Objekte System.IO.FileInfo
und System.IO.DirectoryInfo
in Strings konvertieren.
Logische Antwort:
Sie werfen die FileInfo
Objekte auf Strings. Wenn Sie gci path
ausführen, haben Sie nur Dateien und Verzeichnisse aus diesem Ordner. Es ist also in Ordnung, einfach in den Namen des Elements zu konvertieren.
Wenn Sie gci path\*
verwenden, gilt dies für Ordner, und die Konvertierung in Namen ist nicht zulässig. Daher enthält es den Pfad.
Je nachdem, ob Sie den Namen oder den vollständigen Pfad angeben möchten, tun Sie Folgendes:
%Vor%oder
%Vor%Tags und Links powershell