マイドキュメントフォルダ(d:\My Documents)にインストールしたC++コンパイラにアクセスするプログラムがあります。
プログラムはパス内のスペースを処理できず、パスはすでに二重引用符で囲まれています。dir /x
と を使用して短縮名を見つけようとしましたfor %I in (.) do echo %~sI
。これにより、マイ ドキュメントの完全な名前が返されます。 また、試してみました%userprofile%\documents
が、プログラムはこれを認識しません。
このコマンドを使用してこのフォルダーの短い名前を取得できないのはなぜですか? 短い名前またはおそらく切り捨てられた名前を取得する別の方法はありますか?
答え1
リンクまたはショートカットを参照している可能性があります。
「マイドキュメント」のデフォルトの場所は次のとおりです。
C:\Users\%USERNAME%\Documents
したがって、%USERNAME% が「myname」の場合は、次を参照します。
C:\Users\myname\Documents
DOS 8.3 ファイル名を必要とする古い command.com プログラムを使用しているようです。この場合、最初の 6 文字を取得して、最初の項目に「~1」を追加します。最初の 6 文字が同じ項目が 2 つある場合は、次の項目は「~2」で終わります。確実にするために、「dir /x」を実行して、各フォルダに割り当てられた短縮名を確認できます。
最後の例では、この形式の長いユーザー名がどのようになるかを示します。例のユーザー名は「longusername」になります。
C:\Users\LONGUS~1\DOCUME~1
自分のユーザー名でもこのパターンに従ってください。
「マイ ドキュメント」がデフォルトの場所にない場合、または場所を動的に検索したい場合は、次のレジストリの場所を確認します。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
答え2
dir /x
ファイルとフォルダの短いファイル名が存在する場合はそれを表示します。長い名前が 8.3 文字形式より大きい場合は、短いファイル名が存在します。
たとえば、dir /x
ユーザー プロファイル フォルダーでの使用例を次に示します。
01/02/2018 05:35 PM <DIR> .
01/02/2018 05:35 PM <DIR> ..
10/16/2017 09:41 AM <DIR> ASDM~1 .asdm
11/01/2017 01:01 PM <DIR> GIMP-2~1.8 .gimp-2.8
11/20/2017 05:26 PM <DIR> NETWOR~1 .networkassistant
12/15/2016 09:54 AM <DIR> THUMBN~1 .thumbnails
11/16/2017 09:48 PM <DIR> Contacts
07/17/2017 02:23 PM <DIR> DOCUME~1 Documents
01/03/2018 01:07 PM <DIR> DOWNLO~1 Downloads
03/14/2017 02:43 PM <DIR> GNS3
12/19/2017 01:10 PM <DIR> GOOGLE~1 Google Drive
11/16/2017 09:48 PM <DIR> Links
06/22/2017 07:20 AM <DIR> OneDrive
長い名前の横に短縮名が表示されることに注意してください。
また、名前を短縮するための標準は、スペースを削除し、名前を 6 文字に短縮して ~1 を追加し、すべての文字を大文字にし、ファイル拡張子の最初の 3 文字を追加することです。競合がある場合は、代わりに ~2 が追加されます。
D:\My Documents
ドキュメント フォルダが に保存されており、他に競合する名前がないと仮定すると、短縮名は になりますD:\MYDOCU~1
。
長いファイル名が使用できないのと同じ理由で、%userprofile% も使用できない可能性があります。プログラムは単に環境変数を理解しません。また、これも短縮名バージョンを使用していません。