Ich habe eine Datei README.TXT
. Wenn ich den folgenden Befehl gebe:
PS> Get-Item ReadMe.txt
... dann wird "ReadMe.txt" zurückgegeben. Ich möchte den tatsächlichen Namen der Datei auf der Festplatte herausfinden, einschließlich Groß- und Kleinschreibung. Wie kann ich "README.TXT" zurückgeben?
Ich frage, weil ich versuche, ein Problem mit Dateinamen ohne Berücksichtigung der Groß- und Kleinschreibung unter Windows im Vergleich zu Dateien mit Groß- und Kleinschreibung auf einer Unix-Box aufzuspüren, und ich möchte, dass die tatsächliche Groß- und Kleinschreibung auf der Windows-Box verwendet wird.
Weitere Details: Ich habe eine Liste von Dateien (in einer .CSPROJ
Datei gespeichert ), die sich in einem anderen Fall als die auf der Festplatte gespeicherten befinden. Ich möchte sicher sein, dass sie übereinstimmen. Beispiel: Wenn in der .CSPROJ
Datei "ReadMe.txt" angegeben ist, die Datei auf der Festplatte jedoch "README.TXT" lautet, wird die Datei beim Bearbeiten der Datei in Visual Studio manchmal als "ReadMe.txt" neu geschrieben, wodurch Perforce verwirrt wird, da dies der Fall ist -sensitiv, und der Dateiname hat nicht mehr den erwarteten Fall. Ich möchte ein Skript schreiben, das die nicht übereinstimmenden Dateinamen erkennt, damit ich etwas dagegen tun kann, bevor es ein Problem verursacht.
quelle
Die folgende PowerShell-Funktion basiert auf der eleganten Lösung eines anderen Entwicklers für C # unter https://stackoverflow.com/a/11436327/854680 .
Da Get-ChildItem nicht verwendet wird, ist es viel schneller , was einen Unterschied macht, wenn diese Funktion Dutzende oder Hunderte Male aufgerufen wird .
quelle
Der Großteil der Dateisystemarbeit in PowerShell wird von einigen .NET-Klassen im System.IO-Namespace ausgeführt. Wenn Sie den Pfad kennen (wie in Ihrem Beispiel, Sie haben zum Speicherort des Dateisystems navigiert, in dem sich Ihre Betreffdatei befindet), können Sie Folgendes verwenden
Da bei den .NET-Basisklassen zwischen Groß- und Kleinschreibung unterschieden wird, wird bei der Ausgabe Ihrer Dateinamen auch zwischen Groß- und Kleinschreibung unterschieden.
Als Referenz rufen Sie im Beispiel die GetFiles-Methode des System.IO.DirectoryInfo-Objekts auf, das das aktuelle Arbeitsverzeichnis darstellt ($ pwd). Sie können dies ändern, um auf das Verzeichnis zu verweisen, das die Datei enthält, für die Sie das Gehäuse bestätigen müssen.
Die Eigenschaften Name, BaseName und FullName sollten alle das richtige Gehäuse widerspiegeln.
Weitere Informationen zur GetFiles-Methode.
quelle
Verwenden Sie einfach einen Platzhalter, anstatt den genauen Namen anzugeben:
dies sollte zurückkehren
README.TXT
quelle
Der schnellste Weg, den ich mir vorstellen kann, besteht darin, alle Schrägstriche durch * \ zu ersetzen und dann Get-Item aufzurufen. Um sicherzustellen, dass Sie keine Dupes erhalten, wählen Sie den aus, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird.
quelle
Hier ist mein schneller und schmutziger Ansatz (keine Validierung):
quelle