cmd.exe のタブ補完でドット ファイルを無視できますか?

cmd.exe のタブ補完でドット ファイルを無視できますか?

残念ながら、時々 cmd.exe を使用する必要があり、vim でファイルを編集してタブ補完でそのファイルを実行しようとする場合を除いて、通常はそれほど煩わしいことはありません。

ファイルをfoo.pyvim で開いている場合、.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.aaaa.aaa

_ファイル名の文字に関しては、他の文字と同様に「Z」の後に並び替えられます。

答え2

FindFirstFile (CMD が一致するファイルを列挙するために使用するもの) のセマンティクスは、パターンが長いファイル名 (表示したいもの) と自動生成された「8.3」ファイル名に対してテストされることを意味します。短い名前の生成が、誤った一致の原因です。

FSUTIL 経由で 8.3 の生成を無効にすることはできますが、これによってさらなる生成が停止され、既存の名前は削除されません。完全に削除するには、名前変更を行うスクリプトを実行する必要があります。

ただし、一部のプログラムは理解できず、自動生成された短縮名を書き留めてしまうため、これは危険です (たとえば、古いバージョンの MSOFFICE などの 16 ビット インストーラーを使用している場合)。生成を無効にすると、これらのインストーラーは失敗する可能性があります。

関連情報