Можно ли игнорировать файлы точек с помощью клавиши Tab при автодополнении cmd.exe?

Можно ли игнорировать файлы точек с помощью клавиши Tab при автодополнении cmd.exe?

К сожалению, мне время от времени приходится работать с cmd.exe, и обычно он не доставляет мне особых неудобств, за исключением случаев, когда я редактирую файл в vim, а затем пытаюсь запустить этот файл с помощью автодополнения клавишей Tab.

Если я открываю файл foo.pyв vim, .foo.py.swpон также существует в каталоге. Поведение, которое я вижу, следующее:

C:\foo> f[TAB]
C:\foo> .foo.py.swp[TAB]
C:\foo> foo.py

Это довольно раздражает, и мне интересно, есть ли способ предотвратить это поведение, кроме как полностью обойти проблему, например, сменить название файла подкачки или использовать PowerShell. Я заметил, что PowerShell не эмулирует это поведение, но я действительно не хочу его использовать.

решение1

Windows ведет себя именно так, как и ожидалось, если подумать (и, честно говоря, пока я не увидел ваш вопрос, я не думал об этом полностью). Имя файла, начинающееся с '.', рассматривается как файл с пустым именем и расширением. Чтобы увидеть, как это работает, создайте каталог, а затем создайте следующие файлы, используя touch(я предполагаю, что вы знакомы с touch):

touch .a.aaa
touch a.aaa
touch .b.bbb
touch b.bbb

Теперь в этом каталоге используйте клавишу tabдля циклического перемещения по файлам, и вы увидите, что последовательность следующая:

.a.aaa
.b.bbb
a.aaa
b.bbb

Если вы хотите просмотреть файлы «a», то введите «a» перед , tabи вы получите предсказуемый .a.aaa, a.aaa.

Что касается _символа в имени файла, то он такой же, как и любой другой символ, и располагается после «Z».

решение2

Семантика FindFirstFile (которую CMD использует для перечисления соответствующих файлов) означает, что шаблон проверяется как по длинному имени файла (тому, что вы хотели бы видеть), так и по автоматически сгенерированному имени файла "8.3". Генерация короткого имени является причиной ваших ложных совпадений.

Вы можете отключить генерацию 8.3 через FSUTIL, но это остановит ДАЛЬНЕЙШУЮ генерацию и не удалит уже существующие имена. Вам придется запустить скрипт, который сделает переименования, чтобы полностью удалить их.

Однако это опасно, поскольку некоторые программы невежественны и записывают автоматически сгенерированные короткие имена (например, вы используете 16-битный установщик, например, старые версии MSOFFICE). Если вы отключите их генерацию, то эти установщики могут выйти из строя.

Связанный контент