回答:
あなたが私のような人で、このような問題を修正するために追加のソフトウェアをインストールしたくない場合は、XQYZの提案とrobocopy
問題解決に使用します。(私の場合、最初にロボコピーによって問題が作成されました。ロボコピーに/ XJを指定せずに、再帰的なジャンクションポイントを持つディレクトリをコピーすることによって)。
c:\ subdir \ more \ offending_dirから始まるディレクトリツリーを削除するには:
ステップごとのプロセス全体は、次のように簡単です。
cd c:\subdir\more
親ディレクトリにcdします。mkdir empty
空のディレクトリを作成します。robocopy empty offending_dir /mir
空のディレクトリを問題のあるディレクトリにミラーリングします。rmdir offending_dir
現在空になっている問題のディレクトリを削除し、rmdir empty
中間の空のディレクトリを削除します。robocopy
、ジャンクションポイントを台無しにしました。混乱を一掃する方法を教えてくれてありがとう!
これは実際には修正が非常に簡単です。ディレクトリ構造は次のようになっているとしましょう。
C:\Dir1\Dir1\Dir1\Dir1…
修正するには、各フォルダーの名前を1文字のフォルダー名に変更して、削除するのに長すぎないようにします。
C:\Dir1
を変更C:\D
C:\D\
C:\D\Dir1
を変更C:\D\D
C:\D\D\
プロセスを自動化するバッチファイルを次に示します(この単純なバージョンは、質問で説明されているような単純なディレクトリ、特に使い捨てのディレクトリに最適です)。可能な限り最上位のフォルダーに渡します(C:\Dir1
for C:\Dir1\Dir1\Dir1…
またはC:\Users\Bob\Desktop\New Folder
for C:\Users\Bob\Desktop\New Folder\abcdefghi…
)
@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _
%0
popd
技術説明
他の提案された解決策は後方です。最も内側のディレクトリから外側に向かって作業して修正することはできません。別の方向に進む必要があります。
ディレクトリにアクセスしようとすると、明示的かどうかに関係なく、絶対パスを使用してアクセスします。これには、その前にあるすべてのものが含まれます。したがって、のようなディレクトリ構造の場合C:\Dir1\Dir1\Dir1\Dir1
、最も内側のパスの長さDir1
は22です。ただし、最も外側のパスの長さはDir1
7だけであるため、その内容に関係なくアクセスできます(特定のディレクトリのパスのコンテキストで) 、ファイルシステムには、その内容や子ディレクトリの合計パス長に対する影響についての知識はありません。祖先ディレクトリのみです。合計パス長が長すぎる場合、ディレクトリの名前を変更することはできません。
したがって、パスが長すぎる場合は、可能な限り最高レベルに移動し、名前を1文字の名前に変更して、そのレベルごとに繰り返す必要があります。そのたびに、古い名前と新しい名前の違いによって、パスの全長が短くなります。
反対も同様です。サポートされている最大長(DOSおよびWindows MAX_PATH = 260
)を超えるパスを作成することはできません。ただし、ディレクトリの名前を変更して、最も内側から外側に長い名前に変更できます。その結果、絶対パスが> 260であるより深いフォルダーにはアクセスできなくなります。(それは、それらを「隠し」または安全にするものではありません。それらは簡単にアクセスできるため、このメソッドを使用してファイルを非表示にしないでください。)
興味深いサイドノート
Windows 7 Explorerでフォルダーを作成すると、Explorerでサブディレクトリを作成して、合計長がを超えるように見える場合がありますMAX_PATH
が、実際には「DOS 8.3ファイル名」を使用して不正をしています。これを確認するには、次のようなツリーを作成します。
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
696文字の長さで、もちろん260文字よりはるかに長いです。さらに、エクスプローラーで最も内側のサブディレクトリに移動すると、フォーカスが合っていないときにアドレスバーに期待どおりに表示されますが、アドレスをクリックするとbar、パスをに変更しますC:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
。長さはわずか102文字です。
XPでは、これを行いません。代わりに、サポートされているよりも長いパスを作成することを断固として拒否します。
本当に興味深いのは、NtfsDisable8dot3NameCreation
オプションが設定されているときにWindows 7エクスプローラーが "長すぎるパス"を処理する方法を見つけることです。
\\?\C:\dir\dir\dir\dir
文字通り、MAX_PATH をバイパスするようなパス。関連する「変数」はありません。(しかし、私が言ったように、それは何らかの理由で、rmdir
または他のcmd.exe
md C:\01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
ファイルシステムに合計パス長が263文字になると判断するのに十分な情報があるため、実行できません。失敗します。
subst
仮想ドライブの作成に使用することにより、パスを短縮できます。
C:\>subst Z: "C:\TEMP\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1\dir1"
仮想ドライブに変更します。
cd Z:
これで、ファイルを削除できます。
del *.*
仮想ドライブを削除します。
cd C:\TEMP
subst Z: /d
ディレクトリを削除します。
rd /s dir1
C:\TEMP\dir1\dir1\dir1
、それはその一部を短くするので、あなたが入ることを可能にします。;)
:-)
Robocopyの不注意な使用とHomeserverからのバックアップによって生成された同様の非常に深い構造を削除するために、小さなC#アプリを作成しました。デフォルトでは、Robocopyはジョイントポイントを通常のフォルダーとして扱います... :-(気付かないうちに大きな混乱に陥ることがあります。
このツールは、だれでも使用できるように、ソースファイルとともにCodePlexで入手できます。
少し前に、このタスクを簡単に実行するために使用できるDeleteFilesという小さな自己完結型ユーティリティ実行可能ファイルを作成しました。
この自己完結型のユーティリティを使用すると、次のことが簡単にできます。
deletefiles c:\yourfolder\subfolder\*.* -r -f
フォルダー構造全体を削除します。-rは、開始ディレクトリから下のフォルダー階層を再帰し、-fは、空のフォルダーを削除します(filespecとして。を使用すると、すべてのフォルダーになります)。DeleteFilesは、WindowsのMAX_PATH制限より長いパスをサポートしているため、深くネストされたフォルダーで正常に機能します。
DeleteFilesは無料のオープンソースであり、GitHubからバイナリコードまたはソースコードを取得するか、Chocolateyを使用して直接インストールできます。
> NUL
、最後に追加することでプロセスを高速化できます。
シンプルで簡単
node_modulesが非常にネストされたフォルダであるため、この同じ問題に直面していました。最後に、パスを短くしてフォルダーを削除できるスクリプトを修正するスクリプトを作成しました。
https://github.com/dev-mraj/fdel
npm install fdel -g
fdel ./node_modules
Sikuliでの作業中に、数え切れないほどの量の "calculator.sikuli.calculator.sikuli" dirsを作成するプログラムのCalculator.sikuli再帰ループに夢中になりました。ツリーを移動できましたが、パス名が長すぎて削除できません。
popd loop、Scandiskを使用していくつかのソリューションを試した後、(知覚的に)どこにも到達しません。
このスクリプトを作成して、再帰されたディレクトリ(「a」というディレクトリ)に「深く入り」、(「b」というディレクトリに)移動してから、切り捨てられたツリーを削除し、(「a」に)戻す、繰り返します:
1)cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
.............go deeeeeep in dir *A*
2) move calculator.sikuli ---> D:\b
.............move the crazy tree to dir *B*
3) kill D:\a\calculator.sikuli <---KILL(rd)
.............wipe dir *A*'s tree
4) move D:\b\calculator.sikuli ---> D:\a\
.............move the crazy tree back to dir *A*
REPEAT
D:
cd D:\a\calculator.sikuli\calculator.sikuli\calculator.sikuli\calculator.sikuli
move /-Y calculator.sikuli D:\b
cd D:\b
rd /s/q D:\a\calculator.sikuli
move /-Y calculator.sikuli D:\a
call D:\remdirs2.bat
これは、バッチファイルを再度実行するための呼び出しです。
コマンドプロンプトを開きます。
最も高い 'dir1'を含むフォルダー/ディレクトリに移動します(C:\と仮定します)
c:\> RD /s dir1
編集 (コメント追加後):
他のアイデア:
MSは、ここで問題(多くのアイデア)に対処する方法に関する情報を提供しています。
このツールもあります(個人的に使用したことはありません)-TooLongPath。
おそらく(Eclipseがあるので)ナビゲートして、一度に1つのフォルダーレベルをバックアウトし、それを削除していくようなものを書くでしょうか?
これは、削除するディレクトリへのUNCパスを作成することにより、コマンドラインから直接、またはバッチファイルで実行できます。
代わりに
rmdir /s/q c:\mydirectory
つかいます
rmdir /s/q \\?\c:\myDirectory
このようなUNCスタイルのパスははるかに長く、260文字の制限をバイパスできます。
The path \\?\C:\temp\wqiyretiuqyertiuyqwteiyrutqwuiyertiqrqweirqyert\wqteriuwqyetriuqwteiryutwiuertiuyqerieerrt\IOQWUE~1\QIWUYE~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\ OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1\OIUQYW~1 is too long.
Windows 7 64ビット。
この問題が発生した場合、フォルダー名の一部をはるかに短く名前を変更し、合計パスが十分に短くなったら削除します。追加のツールは必要ありません。
ren
コマンドはで失敗するため機能しませんpath too long
。
再帰的なCobianバックアップタスクによって作成されたことを除いて、同じ問題がありました。私が判明無料Cobianソフトウェアは簡単に超迅速これらの厄介なネストされたフォルダを削除することができDELETERアプリケーションが含まれています。
ツールメニューの下にあります。
いくつかのJavaアプリケーションが行った5000以上のディレクトリディープフォルダーの混乱で同じ問題に遭遇し、このフォルダーを削除するのに役立つプログラムを作成しました。ソースコード全体はこのリンクにあります:
https://gitlab.imanolbarba.net/imanol/DiREKT
しばらくしてすべてが削除されましたが、なんとか仕事をすることができました。同じようにイライラする問題に直面する人々を助けることを願っています