web-dev-qa-db-ja.com

長すぎるファイル名のWindowsでファイルを削除するにはどうすればいいですか?

私の妻はいくつかのファイルやフォルダを持っていて、どういうわけか通常の方法やコマンドラインで削除できないファイル名を持っていました。フォルダ構造が深いため、ファイル名は長すぎます。誰もがこのようなファイルをクリーンアップするための良いユーティリティを知っていますか?

201
user3048

ディレクトリを完全に削除したいときに、そのディレクトリに長いパスが含まれていると、robocopyが非常に良い仕事をします。

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Robocopyは内部的に Unicode対応バージョンのWin32関数を使用し、ファイルパスには\\?\プレフィックスを使用するため、これは機能します 。これらの関数は、259文字ではなく、2116-1文字(32,767)文字に制限されています。

あなたはすべてのファイルを取り除くためにこのプロセスを複数回経験する必要があるかもしれません。

421
Benoit

コマンドプロンプトから:

dir /X

これはあなたのファイル/フォルダを短い名前のフォーマットでリストします。それからファイルを削除するために書かれたように正確に短い名前を使用してください:

del LONGF~1.txt
90
Will Eddins

私は順に各パスの親フォルダの名前を "1"に変更して削除しようとしています。毎回効果的にパスを短縮しています。ディレクトリ構造全体を最終的に削除できるようになるまでは、4〜5ディレクトリ以上作業する必要はありませんでした(これは必要な場合もそうでない場合もあります)。あなたは同様に最後の子フォルダからこれをすることができて、あなたの方法を上下に動かすことができます。

53
joeqwerty

コマンドプロンプト(cmd.exe)を含む一部のプログラムでは、フルパスの先頭に\\.\を付けることでファイルの長さの制限を回避できます。

\\。\ C:\ someディレクトリ\ otherディレクトリ\長い名前のファイル
13
grawity

何かを移動、コピー、または削除するために「フルパスとファイル名」の長さ制限を回避するために使用したトリックは、途中で(またはそれ以上)「ブレークイン」することで短くすることですマップされたドライブ文字を使用してパスの下のフォルダを指します

したがって、c:\ some\long\path ...\and\foo\bar\folders\oldfiles\myoldfile.txtがあります。

次に、パスの最初のチャンクが数文字の長さになるように、任意のドライブ文字をパスに沿ったどこかにマップします。前提条件-フォルダーは共有フォルダー(サーバー上にある場合は既に存在する可能性があり、これを行う必要がある場所)に存在する必要があります。まだ存在しない場合は、パス内のフォルダーを選択しますそれを共有します。環境と妄想レベルに応じて、NTFSアクセス許可が合理的に制限されている限り、すべてのユーザーが共有へのアクセスを変更できるようにします。必要に応じて、自分のアカウントにのみ変更権限を許可してください。

次に、共有フォルダまたはその中のフォルダに移動して共有するか、次のようにコマンドラインを使用します。フォルダー「foo」を「fooshare」として共有するとします。

Net Use x: \\mycomputername\fooshare\bar\folders /persistent:no

x:ドライブはその共有内のフォルダー「folders」を直接指すようになったため、「x:\ oldfiles\myoldfile.txt」はかなり短くなりました。

(「/ persistent:no」は、これが次回の再起動に耐えられず、後で混乱することを意味します。完了したらフォルダの共有を解除することを忘れないでください。)

ファイルを含むフォルダーを必ずしも共有する必要はありません。既に共有フォルダー内にある場合は、共有をマッピングしてすることができます。ネストされたフォルダーをターゲットフォルダーにnearファイルに移動すると、正常に機能します。

ユーザーがフォルダー構造のかなり深い場所にドライブをマップし、そこから255文字を使用できることに気付いたときに、2つのサーバー間で大規模なロボコピーを実行するこの手法を使用する必要がありましたが、合計ファイルパス長を超えていましたローカルドライブルートからアクセスした場合。

13
AdamV

私が見つけた最も簡単な方法は、UbuntuのライブCDから起動することです。

別の方法として、パスの途中に共有フォルダを作成し、それからネットワークドライブをそれにマッピングし、マッピングされたフォルダから削除することもできます(同じマシン上でも)。

9
Col

カット/ペーストしたディレクトリの名前を別の場所に変更してから削除します。ここで動作します。

トラブルを経験したくない場合は、[プロンプト]コマンドを使用してください。

5
Rook

おそらく最善の方法ではないと私は他の人が思い付くものを見ることに興味を持っています -

私は一度これをしました、そして、私は少しも運なしでいくつかのことを試みました。良いツールを探すのではなく、Windows Diskを入れた状態で再起動し、回復コンソールに移動してそこから削除しただけです。初めて働いて本当にうまくいった!

また、ちょうどあなたのためにGoogleをやって、これを見つけました - DelinvFile よさそうですが、それを保証することはできません。

編集 - 警告、ちょうど上で見られたことはただの試験です - たぶん私が最初に思ったほど良くないです!

1
William Hilsum