web-dev-qa-db-ja.com

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

削除しようとすると、ファイル名の長さに制限があるように見えますが、それらのファイルが作成されるのを妨げることはありません。

私たちのビルドプロセスでは、この制限に違反する多数の一時ファイル(多くは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>

手動で問題のあるファイルを見つけて移動/名前を変更しなくても、このdeleteエラーを回避するためのツールや簡単な方法を知っている人はいますか?

374
Herms

私はcmdからものを削除する方法を見つけたと思います。もともと私はdelコマンドを試しましたが、うまくいきませんでした。それから私はrmdirを思い出しました。次のようにします。

rmdir /S /Q <dir>

うまくいったようです。

83
Herms

削除するには、 7-Zip ファイルマネージャを使用してください。

それでも問題が解決しない場合は、必ず利用するようにしてください。 Shift+Delete 7-Zipファイルマネージャ内それ以外の場合、Windowsはそれらをごみ箱に移動しようとします(これは再び失敗します)。

420
Dentrasi

ここで他の(無料の)答えはどれも私のために働きませんでした、しかし私は別のサイトでそれを見つけました:

rimraf <dir>

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

npm install -g rimraf

その後、コマンドラインからrimrafを実行できます。

Npm自体が依存関係をネストする方法が原因でこの問題を引き起こしていたため、この解決策を見つけました。

ちなみにrimrafは、ファイルやフォルダを再帰的に削除するUNIXコマンドrm -rfからその名前を取得しています。

311
jordanbtucker

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

この問題は、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. まず空のディレクトリを作成します。 C:\emptyfolder

    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の 「パスが長すぎる?Robocopyを使用する」 から取得)

シモンズ:私はこの答えがここにあったことを実感しています。 長すぎるファイル名のWindowsでファイルを削除するにはどうすればいいですか? [重複]

Benoit が追加されました:

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

137
hectorpal

私がこの問題を抱えているときに私が使用したツールは FastCopy でした。ドロップダウンからすべて削除を選択し、削除したいディレクトリを選択してすべて削除をクリックしました。

FastCopy delete dialog screenshot

FastCopyは移植可能(インストール不要)で、32ビット版と64ビット版があります。

29
braveterry

Cygwinのrm -rfは長いパスでうまく機能します。

26
gdw2

追加のソフトウェアをインストールしなくても、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
25
Kenneth L

以下を実行して、Powershellからコマンドに移動するだけです。

Cmd /C "rmdir /S /Q <dir>" 
22
Karl Glennon

Dentrasiの解決法 が私には最も効果的でしたが、トップレベルの回答で具体的な手順を投稿したいと思いました。

  1. 7Zip の最新の安定版ビルドをダウンロードしてインストールします。
  2. 7Zipファイルマネージャ(7zfm.exe)を実行します。
  3. 7Zipファイルマネージャで、削除したいフォルダの名前が見えるようにナビゲートします(つまり、親フォルダにいます)。
  4. Shiftボタンを押したままにします。
  5. キーボードまたは7Zipファイルマネージャツールバーのいずれかで、[削除]ボタンをクリックします。 Shiftキーを押したままにしていることを確認します
  6. [OK]ボタンをクリックします。 Shiftキーを押したままにしていることを確認します
18
Mass Dot Net

既存の回答でまだ言及されていない2つのことがあります。

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

ロングパスプレフィックス

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

これは誤ってUNC命名と呼ばれることがよくありますが、関連性はありません。

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

\\?\D:\very long path

UNC名は通常、リモートサーバー上のパスを\\servername\path name\file nameの形式で参照するときに使用されます。これをロングパスプレフィックスと組み合わせると、次のようになります。\\?\UNC\server\share

いくつかの、よく書かれていないが残念ながら非常に一般的なアプリケーションは、UNCファイルパスもロングパスプレフィックスもサポートしていないことに注意してください。

参照: https://msdn.Microsoft.com/ja-jp/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

ロングパスサポート

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

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

  1. 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. 存在しない場合は、「ポリシー」を右クリックして、メニューから「新規」>「Dword(32ビット)値」の順に選択します。
  6. 有効にするにはLongPathsEnabled1に設定します。

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

参照: https://blogs.msdn.Microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10 /

アップデート2017-04-09

@maoizmが上記のレジストリキーの問題を指摘したので、 もう少し掘り下げた を実行しました。システムキーで長いファイル名のサポートを設定できるようになりました。

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

ただし、これはまだそれを使用するように特別に設定されているアプリケーションに対してのみ機能します(アプリケーションのmanifest.xml内のエントリが必要です)。

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

10
Julian Knight

私はcmdソリューションが好きです。エクスプローラーでもうまくいく別の回避策を共有したいのですが、削除する前に親フォルダーの名前を短くするようにしてください。名前を短くするとパスが短くなります。たとえば、フォルダのツリー構造は次のとおりです。

子:

..プロジェクト

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

.. .. ..市内の公園でのアクティビティ

ブラブラブラブラブラブラブラシ

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

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

子:

..プロジェクト

.. .. バツ

.. .. .. y

.. .. .. .. z

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

私の場合は、たくさんのサブフォルダとファイルを含むフォルダ全体を削除したいだけでした。だから私はフォルダの名前を気にしなかった。

8
Anatoly Mironov

7-Zipソリューションはとても効果的です。 gitがインストールされている場合のもう1つの選択肢は、bashシェルを開いて以下を使用することです。

rm -f

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

7
User

私は 総司令官 を提案します(シェアウェアですが、最小限のナッグスタート画面で試用期間後も働き続けます)。これが私がとにかく長すぎるファイル名の問題を解決する方法です。

それらを同等の短縮名を使用して削除することもできます。 dir /xはあなたにそれらを見せます。

2
Ian Boyd

Robocopyを使用してファイルを削除する簡単なJavaプログラムを作成しました。 jarファイルは実行可能なものです。追加の出力のためにcmd行から実行してください。

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

2
CamHart

大きなディレクトリ もこのタスクのために設計されています。 enter image description here

  • ダウンロード
  • 既存のディレクトリを削除するためにRemoveDirectoryWを使用して再帰呼び出しを使用します。
  • 新しく作成されたディレクトリに独自のファイルリポジトリを使用
  • 関連するディレクトリを削除する前に、ファイルをディレクトリから移動できます。
  • ディレクトリの最上部に移動するのは迅速ですが、ネストされたディレクトリごとにクリックされます。
  • Windows XP(SP3)以上
  • インストーラなしの未署名のアンマネージコードなので、予備のフォルダから実行するとSmartscreenが警告する可能性があります。デスクトップ。

CodeProject で詳細情報。

1
Laurie Stearn

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

私は delinfile に出くわし、とてもよくそしてすぐにうまくいきました!

試用は3アクション/ 15日間に制限されていますが、少数のフォルダ/ファイルを削除したいだけの場合に使用できます。

1
Jürgen Paul

ここで完璧な答えを得ました(ファイル用)。 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/ja-jp/library/aa365247.aspx#maxpath も参照してください。

私のニーズには、4つの質問の中から1つの選択肢だけでは不十分です。どういたしまして。

1
Andrew

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

  1. フォルダツリーの少し奥まで入ります。
  2. アドレスバーを使用して、フォルダをツリーの途中からツリーの途中にドラッグアンドドロップします。
  3. 私の画像のように赤いボックスを緑色のボックスにドラッグアンドドロップします。 (この場合、パスは短くなりますが、長いパスでも同様に機能します)
  4. それからあなたの道はより短くなり、通常通り削除キーを使用して削除する。

enter image description here

1

私はついにPowershellを通してこれをする方法を見つけました。これがWindows 7で動作するようにするために私が従った指示はここにあります:

  1. NTFSSecurityという名前の新しいフォルダーをフォルダーC:¥Users¥XXXX¥Documents¥WindowsPowerShell¥Modules¥NTFSSecurityに作成します。XXXXは、Windowsのユーザー名です。例:私のユーザー名が "aspnyc"の場合、新しいフォルダはC:\ Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurityになります。

  2. ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードします - これは単純なZipファイルとして入手できるはずです。

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

個々のファイル名が長すぎるWindows 10上のPowershellでこれを行う方法をついに見つけました。これが私がこれをWindows 10上で動作させるためにたどったステップです:

  1. ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードします - これは単純なZipファイルとして入手できるはずです。
  2. ZipファイルをC:\ WINDOWS\system32\WindowsPowerShell\v1.0\ModulesディレクトリにNTFSSecurityフォルダとして抽出します。
  3. 管理者権限を使ってPowershellコンソールを開き(別名管理者モード)、 Get-Module -ListAvailable を実行して、 NTFSSecurity が表示されていることを確認します。登録済みモジュールのリストにあります。
  4. 符号付き実行モードを回避するには、 Set-ExecutionPolicy Unrestricted を実行します。あなたはYでこの行動を確認しなければなりません(es)
  5. 最終的には削除したいフォルダに移動してください。
  6. Powershellコンソールで、 Import-Module NTFSSecurity を実行します。
  7. Powershellコンソールで、 Remove-Item 2 "YYYY" -Recurse を実行します。ここで、YYYYは、Windowsへの相対パスまたは絶対パスです。再帰的に削除したいフォルダ(例:C:\ Potatoes\Badgers\FolderToDelete)。
  8. うまくいったか確認してください。
  9. Set-ExecutionPolicy Restricted を使用して、最終的に署名付き実行モードに戻ります。あなたはこの行動をY(es)で確認しなければなりません。
0
Epicurist

WinRARのディレクトリに移動し、ファイルを選択して押します F2、ファイルの名前を短い名前に変更します。その後、通常どおりファイルを削除できます。

ソース: https://www.youtube.com/watch?v=qQTyTprFAOg

0
root

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

bash -c "rm -rf dirname_here"

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

0
Richard Szalay