
К сожалению, мне время от времени приходится работать с 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). Если вы отключите их генерацию, то эти установщики могут выйти из строя.