windows – 通常の削除には長すぎるパス/名前を持つディレクトリを削除する方法

file-management windows

Windowsでは、削除しようとするとファイル名の長さに制限があるようですが、そのファイルが作成されるのを防ぐことはできません

私たちのビルドプロセスでは、この制限に抵触するテンポラリファイル(多くは WSDL からビルドされたもの)が多数作成されます。私たちの ant スクリプトはクリーンアップの際にそれらを削除することができますが、時々、実際に ant から完全なクリーンアップを行わずに workarea ディレクトリ (すべての一時ファイルが置かれている場所) を削除する必要があります

これは同じエラーこの質問ですが、私はファイルではなくディレクトリを扱っているので、そこにある答えは私にとって本当に機能しません。そして、実際にそれらを削除するための手動プロセス(単一のコマンドをトリガーする以外)を避けようとしています

エクスプローラーからディレクトリを削除しようとするとエラーが出ます

Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name

powershell で Remove-Item を試してみると、以下のようなエラーが出ます

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

誰もが手動で問題のあるファイルを見つけて移動/名前を付けることなく、この削除エラーを回避するためのツールや簡単な方法を知っていますか?

  400  Herms  2009-12-03


ベストアンサー

7-Zip ファイルマネージャーを使って削除します

それでも問題がある場合は、7-Zipファイルマネージャの中のShift+Deleteを利用してください。そうしないと、Windowsはそれらをごみ箱に移そうとします(これはまた失敗します)

453  Dentrasi  2009-12-03


ここにある他の(無料の)回答はどれも私には効きませんでしたが、別のサイトで見つけました

rimraf <dir>

rimrafNode.jsのパッケージなので、npmを含むNode.jsをインストールする必要があります。そうすれば実行できます

npm install -g rimraf

そして、コマンドラインからrimrafを実行します

この解決策を見つけたのは、npm自体が依存関係をネストする方法のためにこの問題を引き起こしていたからです

ところで、rimrafの名前は、ファイルやフォルダを再帰的に削除するUNIXコマンドrm -rfに由来しています

313  jordanbtucker  2014-07-04


この問題を解決するためのプログラムをインストールする必要はありません

この問題は、2006年に発売されたWindows Vistaからプリインストールされているrobocopyを使えば簡単に解決できます

例えば、rmdir /S /Q <dir>では失敗するケースが報告されています。7zipなどのサードパーティ製ツールを使う必要はありません。Powershellはやりすぎです。Cygwinは動くかもしれませんが、インストールされていないかもしれません。そこで、robocopyに注目してみましょう

という考え方をしています

  1. robocopyを使用してコピー+更新します
  2. を新しい空のフォルダから作成します
  3. を削除したいフォルダ、対象のフォルダに移動します

robocopyを実行すると、ターゲットディレクトリも空になってしまいます

これらの手順はコマンドラインの場合のものです。Windowsで検索を開き、cmdと入力してEnterキーを押すだけです

削除対象は、としておきましょう

C:\delete\this folder\with a very long name

以下のように進めていきます

  1. まず、空のディレクトリを作成します

    mkdir C:\emptyfolder
    
  2. /purgeオプションを使用して、空のディレクトリからターゲットにコピー+更新

    robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
    
  3. 空のディレクトリを削除します。もう必要ありません

    rmdir c:\emptyfolder
    

ソースディレクトリ(C:\emptyfolder)にはファイルやフォルダがないので、ターゲットディレクトリ(C:\delete\this folder\with a very long name)以下のファイルやフォルダを再帰的に削除するだけです!

  • 最後のコツ:手書きを避けることができます

    C:\delete\this folder\with a very long name
    

    エクスプローラーのウィンドウからフォルダをドラッグして、Terminal/cmdウィンドウにドロップします

気をつけてください。削除されたファイルはゴミ箱フォルダには移動しません!一度削除されると、ファイルを回復することはできません

(“パスが長すぎる?BVLANGENの “Use Robocopy “を使ってください)

PS:私はこの答えがここにあったことに気づく、あまり教訓的に。Windowsでファイル名が長すぎるファイルを削除するには?[重複]

ベノワを追加した

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

171  hectorpal  2016-03-03


cmdから物を削除する方法を見つけたと思います。元々はdelコマンドを試してみたのですが、うまくいきませんでした。そこで思い出したのがrmdir以下のようなことをする

rmdir /S /Q <dir>

が効いたようです

89  Herms  2009-12-03


この問題が発生した時に使ったツールは、FastCopyです。ドロップダウンから「すべてを削除」を選択し、削除したいディレクトリを選択して「すべてを削除」をクリックしました

FastCopy delete dialog screenshot

FastCopyはポータブル(インストール不要)で、32ビット版と64ビット版があります

30  braveterry  2014-11-25


追加のソフトウェアをインストールしなくても、substコマンドを使って、長い名前のディレクトリに一時的にエイリアスを作成することができます

例えば、フォルダ C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted を削除したい場合は、コマンドを使用することができます

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

と表示され、WindowsエクスプローラやコマンドプロンプトでX:\folder to be deletedを簡単に削除することができます。一時的なドライブレターのエイリアスを削除するには、コマンドを使用します

subst x: /d

28  Kenneth L  2014-10-28


Cygwinのrm -rfはロングパスでも活躍してくれます

26  gdw2  2014-09-26


以下のように実行することで、Powershellからコマンドにドロップするだけです

Cmd /C "rmdir /S /Q <dir>"

23  Karl Glennon  2011-04-22


デントラーシの解答が一番うまくいったのですが、具体的な手順をトップレベルの解答に掲載したいと思いました

  1. 7zip の最新の安定版をダウンロードしてインストールしてください
  2. 7zipファイルマネージャ(7zfm.exe)を実行します
  3. 7zip ファイルマネージャで、削除したいフォルダの名前が表示されるように移動します(つまり、親フォルダにいることになります)
  4. シフトボタンを押したままにします
  5. キーボードまたは7zipファイルマネージャツールバーの「Delete」ボタンをクリックする; Shiftキーを押したままにしていることを確認してください
  6. OK」ボタンをクリックしてください

19  Mass Dot Net  2015-06-25


既出の回答には、すでに記載されていないことが2つあります

  1. 長いパスにアクセスするには、拡張長のパスプレフィックスを使うことができます
  2. Windows 10 では、一般的な使用のためにロングパスのサポートを有効にすることができます。ただし、すべてのアプリケーションがロングパスで動作するわけではないことに注意してください。これを利用できるのは、適切なマニフェストエントリを持つソフトウェアのみです

ロングパス接頭辞

Windows API には、32k 文字までの Unicode パス名(各要素の長さは 255 文字まで)をサポートする特別な機能があります

これはよくUNCネーミングと間違えられますが、関係はありますがそうではありません

API に長い Unicode パスを使用するように指示するために使用される接頭辞は \\?\ です

\\?\D:\very long path

UNC 名は通常、リモートサーバ上のパスを \\servername\path name\file name の形式で参照する際に使用されます。これを長いパスの接頭辞と組み合わせることができます。\\?\UNC\server\share

書き方が下手ですが、悲しいかなかなり一般的なアプリケーションでは、UNC ファイルパスやロングパスのプレフィックスをサポートしていないものがあることに注意してください

参考にしてください。https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

ロングパス対応

これは最近のバージョンのWindows 10に追加されたオプションです。特定のアプリケーションのサポートが必要なため、執筆時点ではデフォルトでは有効化されていません。興味深いことに、PowerShell にはサポートが組み込まれているので、このオプションを有効にすると、PowerShell スクリプトで直接ロングパスを使用できるようになります

Windowsのバージョンをお持ちの場合は、グループポリシーエディタを使って有効化することができます。または、以下のレジストリの変更を使用することができます。いつものように、何かをする前に変更するレジストリのセクションをバックアップしてください

  1. Run regedit.exe.
  2. UACプロンプトを確認します
  3. キーにナビゲートします。HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. キーLongPathsEnabledを作成または変更します
  5. 存在しない場合は、 Policies を右クリックし、メニューから New > Dword (32 ビット) Value を選択します
  6. LongPathsEnabled1に設定すると有効になります

適切なマニフェストエントリを持つアプリケーションは、POSIX 標準のロングパスにアクセスできるようになりました。これには Windows ストア アプリも含まれます

参考にしてください。https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm さんが上記のレジストリキーの問題を指摘してくれたので、もう少し調べてみましたこれでシステムキーで長いファイル名のサポートを設定できるようになったようです

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

これは、これを使用するように特別に設定されたアプリケーションでのみ動作します (アプリケーションの manifest.xml にエントリが必要です)

また、このメソッドでは相対パス名を使用できないことにも注意してください

13  Julian Knight  2016-09-09


私はcmdの解決策が好きです。エクスプローラだけで動作する別の回避策を共有したいのですが:削除する前に親フォルダの名前を短くしてみてください:短い名前はパスを短くします。あなたは、フォルダのこのようなツリー構造を持っていると言う

C:\

.. Projects

.. ..2014年春の間にいくつかの素晴らしいプロジェクト

.. .. ..市内の公園でのいくつかの活動 金曜日

ブラブラブラブラブラブラブラブラブラブラブラブラブラブラブラブラ

.. .. .. .. ..実際に長い名前のファイルも

この場合、フォルダを削除することはできませんし、ファイルを削除したり名前を変更したりすることもできません。フォルダ構造全体や一部を削除したい場合は、一時的に親フォルダの名前を変更してパスを短くしてから削除します。名前は文字だけでも構いません

C:\

.. Projects

.. .. x

.. .. .. y

.. .. .. .. z

.. .. .. .. ..実際に長い名前のファイルも

私の場合は、サブフォルダやファイルがたくさんあるフォルダ全体を削除したいだけでした。なので、フォルダ名は気にしませんでした

8  Anatoly Mironov  2014-10-28


7-zip での解決策はとても有効です。git をインストールしている場合のもうひとつの方法は、bash シェルを開いて使用することです

rm -f

(フォルダの場合はrm -rf)

8  User  2016-01-11


私は、Total Commander (シェアウェアですが、試用期間後も最低限の起動画面だけで動作し続けます) をお勧めします。それは私がいつも長すぎるファイル名の問題を解決する方法です

4  Sopalajo de Arrierez  2014-04-29


また、同等の短縮名を使って削除することもできます。dir /xで表示されます

2  Ian Boyd  2010-11-06


ロボコピーを使ってファイルを削除する簡単なjavaプログラムを作ってみました。jarは実行可能なものです。追加出力のためには、コマンドラインから実行してください

https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2  CamHart  2015-02-08


他の回答をすべて試してみましたが、(少なくとも私には)うまくいきませんでした

私はdelinfileに出くわして、かなりうまくいって、かなり早く動きました!

それは試用版の3つのアクション/ 15日に制限されていますが、あなただけのいくつかのフォルダ/ファイルを削除したい場合は、それは使用可能です

1  Jürgen Paul  2013-12-20


Bigger Directoriesもこの作業のために設計されています。enter image description here

  • Download
  • 既存のディレクトリを削除するために、RemoveDirectoryW を使用した再帰的な呼び出しを使用します
  • 新規作成されたディレクトリのために独自のファイルリポジトリを使用します
  • ファイルは、連絡先ディレクトリを削除する前に、ディレクトリから移動することができます
  • ディレクトリの先頭への移動は、入れ子になっているディレクトリごとにクリックする必要がありますが、高速です
  • Windows XP(SP3)以上
  • インストーラのない未署名のアンマネージドコードのため、デスクトップなどの予備フォルダから実行すると Smartscreen の警告が出る可能性があります

詳細はCodeProjectをご覧ください

1  Laurie Stearn  2017-01-09


私はWindows 10でこの問題に直面し、この簡単な解決策を見つけました

  1. フォルダツリーの少し奥に入ります
  2. アドレスバーを使って、ツリーの途中からツリーの先頭にフォルダをドラッグ&ドロップします
  3. 私の画像のように、赤枠を緑枠にドラッグ&ドロップします。(この場合はパスが短くなりますが、長いパスの場合も同様に動作します)
  4. そうするとパスが短くなり、通常通りdeleteキーを使って削除することができます

enter image description here

1  Nayana Adassuriya  2017-06-13


ここで完璧な答えを得ました(ファイル用)。Windows 10で動作します

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

こちらも参照してください。https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

4つの質問の中で、私のニーズに合った代替回答は一つもありませんでした。どういたしましてwww

1  Andrew  2017-10-28


Powershellを使ってこれを行う方法をようやく見つけました。以下は、Windows 7 で動作するようにするために私が従った手順です

  1. フォルダ内にNTFSSecurityという新しいフォルダを作成します。例:もし私のユーザー名が「aspnyc」だったら、新しいフォルダは「C:Aspnyc」になるだろう

  2. ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードしてください

  3. Powershell コンソールを開き、Get-Module -ListAvailable を実行し、NTFSSecurity が登録されているモジュールのリストのどこかに表示されていることを確認します
  4. Powershell コンソールで、Import-Module NTFSSecurity を実行します
  5. Powershell コンソールで、Remove-Item2 “YYYY” -Recurse を実行します。ここで、YYYY は、再帰的に削除するフォルダへの Windows パスです (例: C:\Potatoes\BadgersFolderToDelete )

0  Mass Dot Net  2015-06-25


Windows 10で個別のファイル名が長すぎるWindows 10のPowershellでこれを行う方法をようやく見つけました。以下は、Windows 10 で動作するようにするために私が行った手順です

  1. ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードしてください
  2. Extract the Zip file as folder NTFSSecurity in the directory C:\WINDOWS\system32\WindowsPowerShellv1.0\Modules
  3. Powershell コンソールを管理者昇格 (別名:管理者モード) で開き、Get-Module -ListAvailable を実行して、NTFSSecurity が登録されているモジュールのリストのどこかに表示されていることを確認してください
  4. Set-ExecutionPolicy Unrestricted を実行して、署名付き実行モードをバイパスします。このアクションはY(es)で確認する必要があります
  5. 最終的には削除したいフォルダにcd
  6. Powershell コンソールで、Import-Module NTFSSecurity を実行します
  7. Powershell コンソールで、Remove-Item2 “YYYY” -Recurse を実行します。ここで、YYYY は、再帰的に削除したいフォルダへの相対パスまたは絶対パスです (例: C:Potatoes\BadgersFolderToDelete )
  8. うまくいったかどうかを確認します
  9. 最終的にはSet-ExecutionPolicy Restrictedで署名付き実行モードに戻します。この動作はY(es)で確認する必要があります

0  Epicurist  2015-10-09


Windows上のUbuntuにBashがインストールされている場合は、通常のコマンドプロンプトで親ディレクトリにcdしてから、次のように入力します

bash -c "rm -rf dirname_here"

これは bash を起動し、ファイル名の制限がない linux のディレクトリを再帰的に削除し、通常のコマンドプロンプトに戻って終了します

0  Richard Szalay  2017-07-05


WinRARでディレクトリに移動し、ファイルを選択し、F2を押し、ファイルの名前をもっと短い名前に変更します。その後、いつものようにファイルを削除することができます

ソースは以下の通りです。https://www.youtube.com/watch?v=qQTyTprFAOg

0  root  2019-07-16


タイトルとURLをコピーしました