Windows OSでファイルを操作しようとして「対象のパスが長すぎます」というエラーに遭遇したことはないだろうか。なぜこのようなエラーが発生するのか、どうすれば解決できるのか、その方法を幾つか紹介する。
対象:Windows 10/11
Windows OSのエクスプローラなどでファイルを操作しているとき、次のような警告またはエラーメッセージに遭遇することはないだろうか?
操作したファイルの「パス」の長さがある制限を超えると、こうしたエラーメッセージが表示され、「ファイルの削除時にごみ箱に移動できない」「別のフォルダへ移動できない」「ファイル名の変更時に自動的に短縮される」「ファイルのプロパティが開けない」といった不具合が生じることがある。
本Tech TIPSでは、こうしたパスやファイル名/フォルダ名が長すぎる、というエラーの意味や発生する理由を簡単に説明しつつ、その対処方法について幾つか紹介する。手軽な順に記すので、上から1つずつ順番に試してほしい。
Windows OSでは、パスやファイル名/フォルダ名の長さに複数の制限が設けられている。まずファイル名/フォルダ名については、最長で244文字または255文字という上限がある(Windows OSの設定などによって異なる)。
パスの長さの制限は複雑だ。(ドライブ名からではなく)フォルダからの相対的な位置を表す「相対パス」だと最長で259〜260文字とされる。一方、ドライブ名から表される「絶対パス」の場合、Windows OSが備えるファイル/フォルダ操作関連APIの種類によって最長文字数が異なる。259〜260文字が上限というAPIもあれば、約32768文字と非常に長いパスを処理できるAPIもある。
さらに、ファイルを操作するアプリケーション側で、トラブルを防止するために、独自にパス/ファイル名/フォルダ名の長さを制限していることも考えられる。
こうした数々の制限が複雑にからみ合った結果、ある状況では非常に長いパスのファイルが存在できるにもかかわらず、別の状況では(短い方の)パスの長さの上限に引っかかり、「パスが長すぎます」といったエラーが生じてしまうことがある。
対象ファイルへのパスがなるべく短くなるように、そのパスに含まれる各フォルダの名前を短いものに変更してみよう。
例えばZIPファイルを解凍(展開)しているときに「パスが長すぎます」というエラーが生じた場合は、(C:ドライブなどの)ローカルドライブのルートフォルダに1文字のサブフォルダを作成し、そこに展開してみよう。ユーザーの[ドキュメント]フォルダ(デフォルトでは%USERPROFILE%\Documentsフォルダ)以下に展開するのと比べて、絶対パスが大幅に短くなり、エラーを回避できる可能性がある。ただし、管理者権限が要求される場合があるので注意してほしい。
作成済みのファイルの場合は、通常のフォルダ操作の場合と同様に、エクスプローラでフォルダをクリックするか、選択してから[F2]キーを押して、パスに含まれるフォルダ名を短いものに変更していく。
ただ、この方法はフォルダ名が全く変更できないような状況だと難しい。名前が長いファイルを削除するなどした後に、フォルダ名を元に戻したい場合はかなり面倒だ。その場合は、以下の別の方法を試してほしい。
対象ファイルの親フォルダをネットワークドライブとして参照できるようにする、という方法がある。
ネットワークドライブとは、無線LANなどのネットワーク経由でストレージと接続し、「D:」「E:」〜「Z:」といったドライブ名を割り当てることで、あたかもローカルドライブのように参照できるという機能だ。
これを活用すると、ローカルドライブ内にあるファイルでも、ネットワークドライブ経由でアクセスできる。さらに、深い階層にあるフォルダをネットワークドライブのルートフォルダとして設定できるため、パスの長さを大幅に短縮できる。
ただ、Windows OSのネットワーク機能が無効だと、この方法が利用できないことがある。また、管理者権限も必要だ。
さて、ネットワークドライブを設定するには、「UNC」と呼ばれるネットワーク上のパスを指定する必要がある。
\\127.0.0.1\<ドライブ名>$\<対象ファイルがあるフォルダのフルパス名>
上記のUNCのうち、「127.0.0.1」はローカルのPCを指す。「<ドライブ名>$」は「管理共有」と呼ばれ、Windowsが標準で公開する管理目的の共有名である。C:ドライブに対象ファイルが存在する場合は、以下のように「C$」を指定する。
\\127.0.0.1\C$\誰だ\こんなに\長い\ファイル名を\付けたのは?\コピーも\移動も\削除も\ままならないぞ!\どうしよう?
UNCを確定できたら、次の手順でネットワークドライブを設定する。
エクスプローラで「<選択したドライブ名>:\」を開いてみよう。すると、そのルートフォルダに対象ファイルがあるはずだ。
対象ファイルの処理が完了したら、もうネットワークドライブは不要なので切断しよう。それには以下の手順を実行する。
あるいは、いったんサインアウトしてサインインし直してもよい(サインアウト時に対象のネットワークドライブは切断される)。
上記の方法が使えない場合は、mklinkコマンドで「ジャンクション」と呼ばれる「見せかけのフォルダ」を作成し、そこに対象ファイルのあるフォルダを接続(リンク)してみよう。これにより、「<見せかけのフォルダ>\<対象ファイル名>」というパス名で対象ファイルを参照できるようになる。
mklink /J <見せかけのフォルダ> "<対象ファイルがあるフォルダへのパス>"
mklinkとジャンクションについてはTech TIPS「Windowsのシンボリックリンクとジャンクションとハードリンクの違い」を、コマンドプロンプトについては連載「マウスのいらないコマンドプロンプトの世界」をそれぞれ参照していただきたい。
<見せかけのフォルダ>には、C:ドライブなどローカルドライブのいずれかのルートフォルダ直下として、1文字のフォルダ名を指定するとよいだろう。このとき、mklinkコマンドでエラーが生じてしまうので、実際に存在するフォルダを指定しないこと(事前にフォルダを作成してはいけない)。
以下の例では、「C:\Y」という見せかけのフォルダ名を指定している。
mklink /J C:\Y "C:\誰だ\こんなに\長い\ファイル名を\付けたのは?\コピーも\移動も\削除も\ままならないぞ!\どうしよう?"
mklinkコマンドを実行したら、<見せかけのフォルダ>をエクスプローラで開き、対象ファイルにアクセスできることを確認しよう。パスが短くなったことを除けば、通常のファイルと同様に操作できるはずだ。
対象ファイルの処理が完了したら、以下のコマンドラインを実行して<見せかけのフォルダ>を削除する。くれぐれも対象ファイルの方を誤って指定して削除しないように注意すること。
rmdir <見せかけのフォルダ>
以上のいずれの方法でも解決できない場合、Windows 10(バージョン1607以降)やWindows Server 2016以降なら、Windows OSの設定を変更することで259〜260文字というパスの長さの上限を解除する、という方法がある。
解除すると、アプリケーションがWindows OSを介してファイルやフォルダを操作する際、259〜260文字までという従来の制限なしで、そのパスを取り扱えるようになる。つまり、パスの長さが259〜260文字を超えても、そのまま処理できるようになる可能性が高まる。
ただし、アプリケーションによっては、この解除の設定をしてもパス長が制限されたままの場合もある。
このパス長制限の解除には、レジストリ操作とグループポリシーという2種類の方法がある。
レジストリでパス長制限を解除するには、管理者権限が必要だ。
[注意]
レジストリに不正な値を書き込んでしまうと、システムに重大な障害を及ぼし、最悪の場合、システムの再インストールを余儀なくされることもあります。レジストリエディターは慎重に操作するとともに、あくまでご自分のリスクで設定してください。何らかの障害が発生した場合でも、編集部では責任を負いかねます。ご了承ください。
項目 | 内容 |
---|---|
キー | HKLM\SYSTEM\CurrentControlSet\Control\FileSystem |
値の名前 | LongPathsEnabled |
型 | REG_DWORD(DWORD 32bit)型 |
値の内容 | 1: 259〜260文字を超える長いパス名を許可 0: パス名を259〜260文字以下に制限 |
パス長制限を解除するためのレジストリエントリ |
reg add HKLM\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Type DWord -Value 1 -Force
上記の設定をしたら、システムを再起動してから、対象ファイルの操作を試してみよう。
もし成功したら、作業完了後、上記の設定は元の「0」に戻して無効化しておいた方が無難だろう(変更後、同じくシステムの再起動が必要)。全てのアプリケーションで259〜260文字を超える長いパスを処理できるとは限らないので、引き続き259〜260文字以下という制限の下でファイルを操作した方が安全だからだ。
上述のレジストリ設定は、グループポリシーの[コンピューターの構成]−[管理用テンプレート]−[システム]−[ファイル システム]−[Win32 の長いパスを有効にする]でも設定できる。
ただし、Windows OSがHomeエディションの場合、グループポリシーの設定変更はできない(前述のレジストリ設定を試してほしい)。
このポリシーを「有効」にすると、前述のレジストリエントリの値は「1」すなわちパス長制限が解除される。逆に「無効」にすると「0」すなわちパス長を制限するようになる。
ポリシー設定を変更したら、システムを再起動してから、対象ファイルの操作を試してみよう。もし成功したら、前述のレジストリ設定の場合と同じく、この設定を無効に戻して再起動した方がよいだろう。
注意が必要なのは、このポリシーをいったん「有効」または「無効」にしてから「未構成」に戻しても、その直前の「有効」「無効」のどちらかの設定が残ってしまうことだ。その場合は「未構成」ではなく「無効」に設定したままにするか、「未構成」に戻しつつ前述のレジストリエントリの値を手動で「0」に設定する必要がある。
■更新履歴
【2025/01/15】Windows 11に対応しました。PowerShellでパス長制限を解除するコマンドラインと、グループポリシーでパス長制限を解除する際の注意点をそれぞれ追記しました。
【2021/06/02】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.