3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

パスが深すぎて削除できない場合の対処法

Windows環境でパスが深すぎるファイルやフォルダがあると、それを削除しようとすると「ファイルを削除できません」というエラーになります。

こういう場合の対処法ですが、エクスプローラから見えるパスを短くすればいいわけです。

そのためには、ネットワークドライブが有用です。

問題のフォルダの上位のフォルダをネットワーク共有させ、そのUNCパスをネットワークドライブとしてマウントします。

そうすると、パスは必然的に短くなるためWindowsAPIからアクセス可能になり削除できます。

ちなみに、Windows環境での最大パス長(MAX_PATH)は260文字です。

(260はNULL文字やドライブレターを含んだ上他になるので、実際のディレクトリエントリの最大文字列長は255です)

参考:

MAX_PATH はこういう理由で260

WeBlog of Sky color MAX_PATHってつまり…? (デバイス予約文字がファイル名に使えないのは知らなかった。。。)

追記:

コメントで指摘しもらったように、ネットワークドライブを張る以外にも方法があるようです。

ひとつは深いフォルダをルートに移動させてから操作する方法です。(パスが深くて削除できなくても移動はできるようです)

もう一つがsubstコマンドを使う方法です。今まで知らなかったんですが、このコマンドでは任意のパスをドライブ名に割り当てることができるようです。

例えば以下のようにすると、z: に c:\xxx\xxx\xxx\フォルダが割り当てることができます。ネットワークドライブのローカル版みたいな感じでしょうか。

subst z: c:\xxx\xxx\xxx\フ\

なお解除するには以下のようにします。

subst z: /d

ディスクの管理からは特定のボリュームを空のフォルダにマウントできましたが、これは逆ですね。

ご指摘に感謝します。