Wie der Benutzer grawity in seiner Antwort bereits sagte, liegt dies daran, dass die Platzhalter, die von cmd
den internen und mehreren externen Befehlen verwendet werden, auch mit 8.3-Dateinamen übereinstimmen, die standardmäßig aktiviert sind.
Um dies zu umgehen, gibt es mehrere Möglichkeiten, von denen ich Ihnen einige zeigen möchte:
Sie können verwenden findstr
, um die zurückgegebenen Dateinamen zu filtern dir
:
dir /S /B /A:-D "*.asp" | findstr /IEC:".asp"
Dies stimmt nicht einmal mit Dateien überein, die .asp
irgendwo im Namen (wie file.asp.aspx
) stehen, und schließt auch Dateien mit .aspx
Namen (wie file.aspx.asp
) nicht aus.
Der Schalter /B
ermöglicht dir
eine reine Liste von Dateinamen zurückgeben / Pfaden, die richtig gefiltert werden können. Die Option /A:-D
schließt alle übereinstimmenden Verzeichnisse aus.
Alternativ kann der where
Befehl verwendet werden, der Platzhalter anders behandelt als dir
:
where /R "." "*.asp"
Der Nachteil ist, dass dieser Befehl auch den Inhalt der PATHEXT
Variablen berücksichtigt, sodass dies auch zu einer Datei passen würde, die auf endet .asp.exe
, sofern sie .EXE
enthalten ist PATHEXT
; Um dies zu vermeiden, können Sie die PATHEXT
Variable vorübergehend löschen (by set "PATHEXT_BACKUP=%PATHEXT%" & set "PATHEXT="
) und sie später (by set "PATHEXT=%PATHEXT_BACKUP%" & set "PATHEXT_BACKUP="
) wiederherstellen .
Diese Antwort von Benutzer Konrad zeigt eine Möglichkeit, das Standardverhalten der Erstellung von 8.3-Dateinamen von Elementen mit einer Erweiterung mit mehr als 3 Zeichen zu ändern, wodurch die meisten solcher unbeabsichtigten Übereinstimmungen verhindert werden. Dies ändert jedoch leider keine aktuellen 8.3-Dateinamen. Natürlich könnte es theoretisch Situationen geben, in denen die 8.3-Dateinamen noch übereinstimmen, obwohl dies sehr unwahrscheinlich ist.
Ich muss zugeben, dass ich das noch nicht getestet habe ...