削除しようとすると、ファイル名の長さに制限があるように見えますが、それらのファイルが作成されるのを妨げることはありません。
私たちのビルドプロセスでは、この制限に違反する多数の一時ファイル(多くは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エラーを回避するためのツールや簡単な方法を知っている人はいますか?
私はcmd
からものを削除する方法を見つけたと思います。もともと私はdel
コマンドを試しましたが、うまくいきませんでした。それから私はrmdir
を思い出しました。次のようにします。
rmdir /S /Q <dir>
うまくいったようです。
削除するには、 7-Zip ファイルマネージャを使用してください。
それでも問題が解決しない場合は、必ず利用するようにしてください。 Shift+Delete 7-Zipファイルマネージャ内それ以外の場合、Windowsはそれらをごみ箱に移動しようとします(これは再び失敗します)。
この問題を解決するためにプログラムをインストールする必要はありません。
この問題は、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
以下のように進めます。
まず空のディレクトリを作成します。 C:\emptyfolder
。
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の 「パスが長すぎる?Robocopyを使用する」 から取得)
シモンズ:私はこの答えがここにあったことを実感しています。 長すぎるファイル名のWindowsでファイルを削除するにはどうすればいいですか? [重複]
Benoit が追加されました:
あなたはすべてのファイルを取り除くためにこのプロセスを複数回経験する必要があるかもしれません。
私がこの問題を抱えているときに私が使用したツールは FastCopy でした。ドロップダウンからすべて削除を選択し、削除したいディレクトリを選択してすべて削除をクリックしました。
FastCopyは移植可能(インストール不要)で、32ビット版と64ビット版があります。
Cygwinのrm -rf
は長いパスでうまく機能します。
追加のソフトウェアをインストールしなくても、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
以下を実行して、Powershellからコマンドに移動するだけです。
Cmd /C "rmdir /S /Q <dir>"
Dentrasiの解決法 が私には最も効果的でしたが、トップレベルの回答で具体的な手順を投稿したいと思いました。
既存の回答でまだ言及されていない2つのことがあります。
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のバージョンがある場合は、グループポリシーエディタを使ってアクティブ化できます。または、単に以下のレジストリ変更を使用することもできます。いつものように、何かをする前にあなたが変更しているレジストリのセクションをバックアップしてください。
regedit.exe
を実行してください。HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
LongPathsEnabled
を作成または変更します。LongPathsEnabled
を1
に設定します。適切なマニフェストエントリを持つアプリケーションは、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内のエントリが必要です)。
このメソッドでは相対パス名を使用できないことにも注意してください。
私はcmdソリューションが好きです。エクスプローラーでもうまくいく別の回避策を共有したいのですが、削除する前に親フォルダーの名前を短くするようにしてください。名前を短くするとパスが短くなります。たとえば、フォルダのツリー構造は次のとおりです。
子:
..プロジェクト
.. 2014年春のいくつかの素晴らしいプロジェクト
.. .. ..市内の公園でのアクティビティ
ブラブラブラブラブラブラブラシ
長い名前の実際のファイルも
この場合、フォルダを削除することはできず、ファイルを削除したり名前を変更することもできません。フォルダ構造全体またはその一部を削除する場合は、一時的に親フォルダの名前を変更してパスを短くしてからフォルダを削除します。名前は文字にすることができます。
子:
..プロジェクト
.. .. バツ
.. .. .. y
.. .. .. .. z
長い名前の実際のファイルも
私の場合は、たくさんのサブフォルダとファイルを含むフォルダ全体を削除したいだけでした。だから私はフォルダの名前を気にしなかった。
7-Zipソリューションはとても効果的です。 gitがインストールされている場合のもう1つの選択肢は、bashシェルを開いて以下を使用することです。
rm -f
(またはフォルダの場合はrm -rf
)
私は 総司令官 を提案します(シェアウェアですが、最小限のナッグスタート画面で試用期間後も働き続けます)。これが私がとにかく長すぎるファイル名の問題を解決する方法です。
それらを同等の短縮名を使用して削除することもできます。 dir /x
はあなたにそれらを見せます。
Robocopyを使用してファイルを削除する簡単なJavaプログラムを作成しました。 jarファイルは実行可能なものです。追加の出力のためにcmd行から実行してください。
https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing
大きなディレクトリ もこのタスクのために設計されています。
CodeProject で詳細情報。
私は他のすべての答えを試してみましたが、それらはうまくいきませんでした(私には少なくとも)。
私は delinfile に出くわし、とてもよくそしてすぐにうまくいきました!
試用は3アクション/ 15日間に制限されていますが、少数のフォルダ/ファイルを削除したいだけの場合に使用できます。
ここで完璧な答えを得ました(ファイル用)。 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つの選択肢だけでは不十分です。どういたしまして。
私はついにPowershellを通してこれをする方法を見つけました。これがWindows 7で動作するようにするために私が従った指示はここにあります:
NTFSSecurityという名前の新しいフォルダーをフォルダーC:¥Users¥XXXX¥Documents¥WindowsPowerShell¥Modules¥NTFSSecurityに作成します。XXXXは、Windowsのユーザー名です。例:私のユーザー名が "aspnyc"の場合、新しいフォルダはC:\ Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurityになります。
ファイルシステムセキュリティPowerShellモジュールパッケージをダウンロードします - これは単純なZipファイルとして入手できるはずです。
個々のファイル名が長すぎるWindows 10上のPowershellでこれを行う方法をついに見つけました。これが私がこれをWindows 10上で動作させるためにたどったステップです:
WinRARのディレクトリに移動し、ファイルを選択して押します F2、ファイルの名前を短い名前に変更します。その後、通常どおりファイルを削除できます。
Windows上のUbuntuにBashがインストールされている場合は、通常のコマンドプロンプトで親ディレクトリに移動して、次のように入力します。
bash -c "rm -rf dirname_here"
これはbashを起動し、ファイル名の制限がないLinuxからディレクトリを再帰的に削除してから、通常のコマンドプロンプトに戻ります。