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>
rimrafはNode.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
に注目してみましょう
という考え方をしています
robocopy
を使用してコピー+更新します- を新しい空のフォルダから作成します
- を削除したいフォルダ、対象のフォルダに移動します
robocopy
を実行すると、ターゲットディレクトリも空になってしまいます
これらの手順はコマンドラインの場合のものです。Windowsで検索を開き、cmd
と入力してEnterキーを押すだけです
削除対象は、としておきましょう
C:\delete\this folder\with a very long name
以下のように進めていきます
まず、空のディレクトリを作成します
mkdir C:\emptyfolder
/purge
オプションを使用して、空のディレクトリからターゲットにコピー+更新robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
空のディレクトリを削除します。もう必要ありません
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はポータブル(インストール不要)で、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
デントラーシの解答が一番うまくいったのですが、具体的な手順をトップレベルの解答に掲載したいと思いました
- 7zip の最新の安定版をダウンロードしてインストールしてください
- 7zipファイルマネージャ(7zfm.exe)を実行します
- 7zip ファイルマネージャで、削除したいフォルダの名前が表示されるように移動します(つまり、親フォルダにいることになります)
- シフトボタンを押したままにします
- キーボードまたは7zipファイルマネージャツールバーの「Delete」ボタンをクリックする; Shiftキーを押したままにしていることを確認してください
- OK」ボタンをクリックしてください
19 Mass Dot Net 2015-06-25
既出の回答には、すでに記載されていないことが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のバージョンをお持ちの場合は、グループポリシーエディタを使って有効化することができます。または、以下のレジストリの変更を使用することができます。いつものように、何かをする前に変更するレジストリのセクションをバックアップしてください
- Run
regedit.exe
. - UACプロンプトを確認します
- キーにナビゲートします。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
- キー
LongPathsEnabled
を作成または変更します - 存在しない場合は、 Policies を右クリックし、メニューから New > Dword (32 ビット) Value を選択します
LongPathsEnabled
を1
に設定すると有効になります
適切なマニフェストエントリを持つアプリケーションは、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は実行可能なものです。追加出力のためには、コマンドラインから実行してください
2 CamHart 2015-02-08
他の回答をすべて試してみましたが、(少なくとも私には)うまくいきませんでした
私はdelinfileに出くわして、かなりうまくいって、かなり早く動きました!
それは試用版の3つのアクション/ 15日に制限されていますが、あなただけのいくつかのフォルダ/ファイルを削除したい場合は、それは使用可能です
1 Jürgen Paul 2013-12-20
Bigger Directoriesもこの作業のために設計されています。
- Download
- 既存のディレクトリを削除するために、RemoveDirectoryW を使用した再帰的な呼び出しを使用します
- 新規作成されたディレクトリのために独自のファイルリポジトリを使用します
- ファイルは、連絡先ディレクトリを削除する前に、ディレクトリから移動することができます
- ディレクトリの先頭への移動は、入れ子になっているディレクトリごとにクリックする必要がありますが、高速です
- Windows XP(SP3)以上
- インストーラのない未署名のアンマネージドコードのため、デスクトップなどの予備フォルダから実行すると Smartscreen の警告が出る可能性があります
詳細はCodeProjectをご覧ください
1 Laurie Stearn 2017-01-09
私はWindows 10でこの問題に直面し、この簡単な解決策を見つけました
- フォルダツリーの少し奥に入ります
- アドレスバーを使って、ツリーの途中からツリーの先頭にフォルダをドラッグ&ドロップします
- 私の画像のように、赤枠を緑枠にドラッグ&ドロップします。(この場合はパスが短くなりますが、長いパスの場合も同様に動作します)
- そうするとパスが短くなり、通常通りdeleteキーを使って削除することができます
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 で動作するようにするために私が従った手順です
フォルダ内にNTFSSecurityという新しいフォルダを作成します。例:もし私のユーザー名が「aspnyc」だったら、新しいフォルダは「C:Aspnyc」になるだろう
ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードしてください
- Powershell コンソールを開き、Get-Module -ListAvailable を実行し、NTFSSecurity が登録されているモジュールのリストのどこかに表示されていることを確認します
- Powershell コンソールで、Import-Module NTFSSecurity を実行します
- Powershell コンソールで、Remove-Item2 “YYYY” -Recurse を実行します。ここで、YYYY は、再帰的に削除するフォルダへの Windows パスです (例: C:\Potatoes\BadgersFolderToDelete )
0 Mass Dot Net 2015-06-25
Windows 10で個別のファイル名が長すぎるWindows 10のPowershellでこれを行う方法をようやく見つけました。以下は、Windows 10 で動作するようにするために私が行った手順です
- ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードしてください
- Extract the Zip file as folder NTFSSecurity in the directory C:\WINDOWS\system32\WindowsPowerShellv1.0\Modules
- Powershell コンソールを管理者昇格 (別名:管理者モード) で開き、Get-Module -ListAvailable を実行して、NTFSSecurity が登録されているモジュールのリストのどこかに表示されていることを確認してください
- Set-ExecutionPolicy Unrestricted を実行して、署名付き実行モードをバイパスします。このアクションはY(es)で確認する必要があります
- 最終的には削除したいフォルダにcd
- Powershell コンソールで、Import-Module NTFSSecurity を実行します
- Powershell コンソールで、Remove-Item2 “YYYY” -Recurse を実行します。ここで、YYYY は、再帰的に削除したいフォルダへの相対パスまたは絶対パスです (例: C:Potatoes\BadgersFolderToDelete )
- うまくいったかどうかを確認します
- 最終的には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