Eclipseはディレクトリの1つに一時フォルダを作成しました。
dir1\dir1\dir1\dir1\...
Windowsでエクスプローラ、del
またはrmdir
コマンド、Cygwinのrmコマンドを使ってこのフォルダを削除することはできません。この非常に長いフォルダを削除するにはどうすればよいですか。
「ファイル名が長すぎます...」と言っているだけです。
あなたが私のようで、このような問題を解決するために追加のソフトウェアをインストールしたくない場合は、 XQYZの提案 を使ってrobocopy
を使ってください。問題を解く。 (私の場合、問題は最初にrobocopyによって、再帰接合点を持つディレクトリをrobocopyに提供せずにコピーすることによって発生しました)。
ディレクトリツリーを削除するには c:\ subdir\more\offending_dir:
ステップバイステップのプロセス全体は、これと同じくらい簡単です。
cd c:\subdir\more
。mkdir empty
。robocopy empty offending_dir /mir
。rmdir offending_dir
は今空の問題のディレクトリを取り除くためにrmdir empty
。これは実際には非常に簡単に修正できます。ディレクトリ構造は以下のようになっているとします。
C:\Dir1\Dir1\Dir1\Dir1…
それを修正するには、削除するには長すぎなくなるまで、各フォルダの名前を1文字のフォルダ名に変更します。
C:\Dir1
をC:\D
に名前変更しますC:\D\
に移動しますC:\D\Dir1
をC:\D\D
に名前変更しますC:\D\D\
に移動しますこれはプロセスを自動化するためのバッチファイルです(この単純なバージョンは、質問で説明されているような単純なディレクトリ、特に使い捨てのディレクトリに最適です)。それを可能な限り高いフォルダに渡してください(例:C:\Dir1
の場合はC:\Dir1\Dir1\Dir1…
、C:\Users\Bob\Desktop\New Folder
の場合は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のエクスプローラでフォルダを作成する場合、エクスプローラでサブディレクトリを作成して全体の長さを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エクスプローラが「長すぎるパス」をどのように処理するかを調べることです。
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
私はRobocopyの不注意な使用とHomeserverからのバックアップによって生成された同様の非常に深い構造を削除するのに役立つ小さなC#アプリを書きました。デフォルトではRobocopyはジョイントポイントを通常のフォルダとして扱います... :-(気づかないうちに大きな混乱をきたすことがあります。
誰でも使用できるように、このツールはCodePlexでソースファイルとともに入手可能です。
少し前に、このタスクを簡単に実行するために使用できる、DeleteFilesという名前の小さい自己完結型のユーティリティ実行可能ファイルを作成しました。
この自己完結型のユーティリティを使用すると、簡単に実行できます。
deletefiles c:\yourfolder\subfolder\*.* -r -f
フォルダ構造全体を削除します。 -rは開始ディレクトリから下にフォルダ階層を再帰的に指定します。-fは空のフォルダをすべて削除します(ファイル指定として。を使用すると、すべてのフォルダになります)。 DeleteFilesはWindowsのMAX_PATH制限より長いパスをサポートしているため、深くネストされたフォルダでも問題なく動作します。
DeleteFilesは無料でオープンソースです。 GitHub からバイナリコードまたはソースコードを入手するか、 Chocolateyを使用して直接インストールできます。
シンプル&イージーナウ
とても長い間ネストされたフォルダを持つnode_modulesで私はこれと同じ問題に直面していました。パスを短くすることでフォルダを削除できるスクリプトを修正しました。
https://github.com/dev-mraj/fdel
npm install fdel -g
fdel ./node_modules
Sikuliを使って作業している間、私はプログラムの中に "calculator.sikuli.calculator.sikuli"という数えきれないほどの量を作成したCalculator.sikuli再帰ループを使用しました。ツリーを移動できますが、パス名を削除するには長すぎます。
Popdループでいくつかの解決策を試した後、スキャンディスクを実行して、(知覚できるほど)どこにも行かなくなりました。
私はこのスクリプトを書き、再帰されたdirの中に深く入り(aと呼ばれるdirに)、それらを(bと呼ばれるdirに)移動し、そして切り捨てられた木を削除し、(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
これはバッチファイルを再度実行するための呼び出しです。
Eclipseがハードドライブ上にゴミを作成することを決めたとき、私たちはこのような問題を抱えていました。 robocopyの/ MIR関数を使って空のディレクトリを入れ子にしたものにミラーリングすることで修正しました。
コマンドプロンプトを開きます。
最も高い 'dir1'を含むフォルダ/ディレクトリに移動します(C:\とします)。
c:\> RD /s dir1
編集(コメント追加後):
その他のアイデア:
MSはこの問題にどう対処するかについての情報を提供しています(たくさんのアイデアを試してみてください) こちら 。
このツールもあります(決して個人的に使ったことはありません) - TooLongPath 。
たぶん、(あなたがEclipseを持っているので)何度もたどり着き、それから一度に一つのフォルダレベルをバックアウトする何かを書く?
コマンドプロンプトを開いて実行してみます。
rmdir /s <directory>
それでもうまくいかない場合は、ディレクトリツリーの途中までcdして、ディレクトリのサブセット(最も内側の20個のディレクトリなど)を削除し、そこから先に進むようにします。
ネットワークフォルダの場合は、そのディレクトリの親ディレクトリを共有してローカルマシンのドライブにマップしてから、フォルダを削除します。
別の解決策:Total Commanderをダウンロードしてください。長いファイル名に対応しているという理由だけではなく、非常に便利なプログラムです。
未登録のバージョンは、知識がありませんが、完全に機能します、それは仕事をします。
これは、削除したいディレクトリへのUNCパスを作成することによって、コマンドラインから直接またはバッチファイルで実行できます
そうではなく
rmdir /s/q c:\mydirectory
つかいます
rmdir /s/q \\?\c:\myDirectory
このようなUNCスタイルのパスはもっと長くなり、260文字の制限を回避できます。
私は同じ問題を抱えていましたが、それは再帰的なCobian Backupタスクによって作成されたものです。私は 無料のCobianソフトウェア に、これらの厄介な入れ子になったフォルダを簡単にすばやく簡単に削除できるDeleterアプリケーションが含まれていることがわかりました。
ツールメニューの下にあります。
私がこの問題を抱えているとき、私は単にフォルダ名のいくつかをもっともっと短く名前を変更し、そして完全なパスが十分に短くなると、それはOKを削除します。追加のツールは必要ありません。
私はいくつかのJavaアプリケーションがした5000+ディレクトリ深さのフォルダの混乱で同じ問題に遭遇しました、そして、私はあなたがこのフォルダを削除するのを助けるプログラムを書きました。ソースコード全体はこのリンクにあります。
https://gitlab.imanolbarba.net/imanol/DiREKT
それはしばらくして全てを取り除きました、しかしそれは仕事をすることに成功しました。