Windows の短いファイル名では、~ の後の数字はどのように割り当てられるのでしょうか?

Windows の短いファイル名では、~ の後の数字はどのように割り当てられるのでしょうか?

Windows では、長い名前を持つファイルやディレクトリを短縮するために がまだ使用されています。コマンド プロンプトに~入力すると、「短い」名前が表示されます。dir /X

私の質問は、短いファイル名に数字がどのように割り当てられるかということです。アルファベット順ではないようですし、ファイルの作成時間によって機能しているわけでもないようです。

例えば:

新しいテキスト ファイルを作成します。C:\reallylongfilenameB.txt

次に実行してdir /X、ファイルBの短縮名を確認します。REALLY~1.TXT

2 番目のテキスト ファイルを作成します。C:\reallylongfilenameA.txt

次に実行してdir /X、fileAの短縮名を確認します。REALLY~2.TXT

次に、時計を 1 日戻して削除しC:\reallylongfilenameA.txt、再作成します。つまり、作成日がC:\reallylongfilenameA.txt1 日前になりますC:\reallylongfilenameB.txt

実行しdir /XてもC:\reallylongfilenameA.txt短縮名はそのままですREALLY~2.TXT

C:\reallylongfilenameA.txtこの例の場合、 beの短縮名を作成する方法はありますかREALLY~1.TXT?

答え1

私の理解では、NTFS は作成時に永続的な 8.3 ファイル名を自動的に割り当てます。dir /X を実行すると、ファイル名がオンザフライで短縮されるのではなく、事前に割り当てられた短い名前が検索されます。

ソース:http://en.wikipedia.org/wiki/8.3_ファイル名

答え2

Jack が回答で指摘したように、短い名前はファイルが作成 (または名前変更、または移動) されたときに割り当てられます。値は長いファイル名と、すでに存在する他の短い名前の両方に依存します。

正確な短い名前の割り当てアルゴリズムは文書化されておらず、Windows のバージョン間、または異なるストレージ システム形式間でもアルゴリズムが一定であるという保証はありません。特定の短い名前の割り当てアルゴリズムに依存するコードを記述しないでください。

短いファイル名には、設計上の制限とバグの両方があります。設計上の制限の例としては、短いファイル名の拡張子がおそらく であるため、del *.txtという名前のファイルを削除でき、ソースマスクは長い名前と短い名前の両方を参照する、というものがあります。something.txt2.txt「バグ - 短い 8.3 ファイル名は /D および /S オプションを壊す可能性があります」Windows FINDSTR コマンドの文書化されていない機能と制限は何ですか?短い名前から生じるバグの例。

NTFS ボリュームでは、短いファイル名を無効にすることができます (無効にする前に存在していた短い名前はそのまま残ります)。多くの人 (組織) は、問題が発生する可能性があるため、システム上で短い名前を無効にしています。

アップデート

短いファイル名を生成するアルゴリズムを確立しようとするのは時間の無駄である理由についての決定的な議論は次のとおりです。FSUTIL では、そのフォルダー内にまだ存在しない限り、ファイルに任意の短い名前を指定できます。

関連するFSUTILヘルプドキュメントはこちら

C:\test>fsutil file
---- FILE Commands Supported ----

findbysid               Find a file by security identifier
queryallocranges        Query the allocated ranges for a file
setshortname            Set the short name for a file
setvaliddata            Set the valid data length for a file
setzerodata             Set the zero data for a file
createnew               Creates a new file of a specified size
queryfileid             Queries the file ID of the specified file
queryfilenamebyid       Displays a random link name for the file ID

C:\test>fsutil file setshortname /?
Usage : fsutil file setshortname <filename> <shortname>
   Eg : fsutil file setshortname C:\testfile.txt testfile

関連情報