Sep 04, 2020 18:39
Допустим, у вас в каталоге есть файлы foo.a и bar.ab. Команда dir *.a выдаст только foo.a, что вполне логично. Но если расширение файла в строке поиска состоит из трёх и более символов, всё резко меняется. Например, в каталоге есть файлы foo1.txt и foo2.txtnew. Команда dir *.txt выдаст оба!
Но и это ещё не всё. Пусть в каталоге есть файл longfilename.txt. Тогда команда dir *1*.txt выдаст его.
Всё дело в том, что на соответствие шаблону поиска проверяются как длинные имена файлов, так и короткие в формате 8.3, унаследованном ещё из DOS. Короткое имя у foo2.txtnew будет foo2~1.txt, а у longfilename.txt - longfi~1.txt (если в каталоге есть другие файлы с длинными именами, цифры в коротком имени могут измениться, но это уже частности). Как видите, эти имена соответствуют шаблону поиска, так что формально Windows права. Кстати, посмотреть короткие имена файлов можно с помощью команды dir /x.
Такие вот тщательно замаскированные грабли.
Удивительное рядом,
windows shell