Windows OSでファイルを操作しようとして「対象のパスが長すぎます」というエラーに遭遇したことはないだろうか。なぜこのようなエラーが発生するのか、どうすれば解決できるのか、その方法を幾つか紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
対象:Windows 8.1/Windows 10、Windows Server 2012/2012 R2/2016
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:〜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とジャンクションについてはTech TIPS「Windowsのシンボリックリンクとジャンクションとハードリンクの違い」を、コマンドプロンプトについては連載「マウスのいらないコマンドプロンプトの世界」を参照)。
Copyright© Digital Advantage Corp. All Rights Reserved.