To pytanie ma już tutaj odpowiedź:
- cmd ma błąd wieloznaczny? [duplikować] 3 odpowiedzi
Oto zawartość katalogu:
λ dir /b "..\src\"
main.c
main.c_
main.c2
main.cpp
main.cpp_
main.cpp2
Działa to zgodnie z oczekiwaniami:
λ dir /b "..\src\*.c"
main.c
To nie:
λ dir /b "..\src\*.cpp"
main.cpp
main.cpp_
main.cpp2
Dlaczego ten symbol wieloznaczny jest zgodny? main.cpp_ i main.cpp2 ?
Co to jest działające rozwiązanie do wyświetlania tylko plików * .cpp w katalogu?
EDYCJA: nie jest duplikatem cmd ma błąd wieloznaczny?
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] NtfsDisable8dot3NameCreation=1
aby wyłączyć - domyślnie jest włączone.Odpowiedzi:
Mimo że jest trochę dziwny, działa jak określono (kursywa zaznaczona przeze mnie):
źródło
dir /x ...
pokaże zarówno krótkie, jak i długie nazwy plików.fsutil behavior set disable8dot3 1
)dir /x *.cpp
powinien działać (nie testowany).λ dir /x "..\src\*.cpp" | find "/"
09/09/2015 17:52 51 605 main.cpp
09/09/2015 17:52 51 605 MAIN~1.CPP main.cpp_
09/09/2015 17:52 51 605 MAIN~2.CPP main.cpp2
Ponieważ rozszerzenie ma więcej niż 3 znaki i używasz interpetera poleceń, który ma wiele kodów kompatybilności wstecznej dla aplikacji 16-bitowych. Gdybyś uruchomił to samo polecenie w PowerShell, zachowywałby się zgodnie z oczekiwaniami.
Edytuj, ponieważ nie mogę odpowiadać na komentarze
Tak, po prostu uruchom powershell.exe, a następnie wydaj to samo polecenie, bez flagi / b.
Edytuj 2
O ile wiem, nie byłoby rozwiązania, chyba że chciałbyś napisać własne
dir
program. Jeśli chodzi o PowerShell, dobrym pomysłem byłoby zapoznanie się z nim, ponieważ jestem pewien, że Microsoft próbuje zabić starszego tłumacza DOS.źródło
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] NtfsDisable8dot3NameCreation=1
„Znalazłem rozwiązanie bez użycia PowerShell:
źródło