「C:\Program Files」と同じ短縮名を持つフォルダーを C:\ に作成するにはどうすればよいでしょうか?

「C:\Program Files」と同じ短縮名を持つフォルダーを C:\ に作成するにはどうすればよいでしょうか?

NTFS のショートネームは、8.3 ファイル名 (<8 文字の名前>.<3 文字の拡張子>) のみをサポートする DOS システムの互換性機能です。現在のディレクトリにあるファイル/フォルダーのショートネームは、 で取得できますdir /x

「C:\Program Files」の短縮名は「PROGRA~1」です。「PROGRA~1」になり、「C:\Program Files」が「PROGRA~2」になるには、フォルダにどのような名前を付ければよいでしょうか。

「Program Filas」、「Program Fil」、「Program File」を試しましたが、効果はありませんでした。また、作成、変更、最終書き込み時間を、次のように古い値に設定してみました。

$(Get-Item "Program Filas").creationtime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastaccesstime=$(Get-Date "01/01/2000 00:01 am")
$(Get-Item "Program Filas").lastwritetime=$(Get-Date "01/01/2000 00:01 am")

答え1

PROGRA~1すでに同じ名前の別のディレクトリが存在する限り、それは決して起こりません。

短縮名は持続的– オブジェクトの作成時に選択され、通常の名前と同じようにファイルシステムに保存されます。名前が割り当てられると、アルファベット順や変更タイムスタンプによって名前が変更されることはありません。(結局のところ、名前は仕事通常の名前と同じように、名前が突然変わることもありません。

Win32 APIには関数があるファイル短縮名の設定()これにより、任意のパスの 8.3 名を直接変更できるため、この変更を実行するには短いプログラムを作成します (または Python ctypes などを使用します)。

(「Program Files」の短縮名をカスタム名に変更した後、プログラムに必要な場合は、文字通りの名前のディレクトリを作成できますPROGRA~1。アルゴリズムを騙すために特別な名前を作成する必要はありません。)

あるいは、「Program Files」の名前を「asdf」に変更して、短縮名を解放することもできます。その後、「PROGRA~1」がディレクトリによって要求されたら、実際の名前を「Program Files」に戻し、~2 が割り当てられます。

関連情報