web-dev-qa-db-ja.com

末尾にスペースがあるWindows 7でフォルダーを削除できない

問題:削除できないWindows 7サブディレクトリがあります。

私はここで他の人を知っていますが、インターネット上の他の多くがこの一般的なクラスのWindows 7ファイルシステムの問題について質問していますが、ここでの私の質問は特にディレクトリ名の末尾のスペース。

ファイルシステムを検査および/または編集するためのより良いツールがありますか(必要に応じて16進数で)?


OS: x64 Professionalを実行していますが、完全に更新されています。

試されたこと:私はこの主題に関する多くのウェブページを読み、多くの潜在的な解決策を試してみました。私は最近、システム内部を完全に処理できると思われるPowerShellを使用して問題を研究しています。この時点で、ファイルシステム用の16進エディタのようなものを探しています。

原因:

  • 長いファイル名、または
  • 長い道のりにいることで、

修正されないもの:

  • 古いDOSファイルの命名スキームを使用した名前の変更
  • [〜#〜] chkdsk [〜#〜] ファイルシステム全体の実行
  • アクセスしている可能性のある他のすべてのプログラムをシャットダウンする
  • ウイルス対策ソフトウェアを無効にする
  • Delinvfile.exe 4.5ユーティリティを使用します。注:Delinvfileは、「無効な文字を含むショートネームを持つファイルとフォルダー。これらには[ファイル名では許可されない]文字が含まれます」を修正できないと述べています。
<  -  Less than symbol
>  -  Greater than symbol
:  -  Colon
"  -  Quotation Mark
/  -  Forward Slash
|  -  Vertical Bar
?  -  Question mark
*  -  Asterisk

その原因は何ですか?私の場合、削除できないサブディレクトリは数か月前にカスタムで作成されました [〜#〜] php [〜#〜] =ソースツリーのバックアップに使用するプログラム。名前にスペースまたはその他の不適切な文字が含まれているように見えますが、私にはわかりません。ファイルディレクトリに表示されますが、削除、名前変更、rmdirなどは使用できません。

Investigation:ファイルシステム上で移動して、C:の「holds bad subdir」というサブディレクトリ内に配置しました。

ここでそれを見ることができます PowerShellで 。最初に Get-ChildItem (エイリアス 'dir'と同じ)で表示します:

PS C:\holds bad subdir> Get-ChildItem


    Directory: C:\holds bad subdir


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        1/9/2014   3:01   AM            20120530-04

Cmdウィンドウで「del "2" + tab」と入力して削除しようとすると、次のようにファイル名の展開が完了します。del "20120530-04"、ディレクトリ名の末尾にスペースがあることを示します。このコマンドを実行すると、結果は次のようになります。

C:\ holds bad subdir\20120530-04が見つかりませんでした

Del 2 *で削除しようとすると、システムはあたかも削除したかのように戻りますが、削除はしません。

PowerShellでこの同じコマンドを発行し、Forceオプションも指定すると、次のように、「指定されたパスC:\ holds bad subdir\20120530-04にオブジェクトが存在しません。」と報告されます。

PS C:\holds bad subdir> Remove-Item 2* -Force  Remove-Item : An object at the specified path C:\holds bad subdir\20120530-04  does not exist.At line:1 char:1
+ Remove-Item 2* -Force
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RemoveItemCommand

ディレクトリはそれをはっきりと見ることができるため、これは一種の奇妙なことですが、どのメソッドも明らかにそれを見ることができないか、適用することができません。

Windows Explorer で削除不可能なサブディレクトリを表示することもできます。ブラウズすると、「このフォルダーは空です」と表示されます。そして、そこで削除しようとすると、次のようになります:

Enter image description here

また、このフォルダーのpropertiesを表示すると、名前が「20120530-04」、つまり末尾に余分なスペースがあることがわかります。

Enter image description here

また興味深いことに、[セキュリティ]タブには「(X)要求されたセキュリティ情報が利用できないか、表示できません。」と報告されます。

また、読み取り専用ではなく、非表示でもありません。


問題の範囲:さて、これは大きな問題ではありません。このサブディレクトリをすぐに外れたサブディレクトリに埋めることは簡単で、心配する必要はありませんそれ。

しかし、私にとってこれは知的挑戦になり、一部はWindows g7の根源についてより詳しく知る方法になりました。Windowsのこのようなバグは非常に低いレベルで存在し、非常に多くのシステムが世界。現時点では、これがWindowsのバグなのか、不正なデータ(バグが取り込む)なのか、あるいは単なる不正なデータなのかを知るのは困難です。

23
Elliptical view

NTFSファイルシステムボリューム上のファイルまたはフォルダーを削除することはできません(表示するにはJavaScriptが必要)、動作するはずです( [〜#〜] unc [〜#〜] パスを使用していることに注意してください)。

rd "\\?\C:\holds bad subdir\20120530-04 "

必ずcmd.exeでこれを実行してください。 PowerShellの Remove-Item (rd)では動作しないようです。

こちらもご覧ください:

77
Lars Truijens

いくつかの提案があります。

方法1:コマンドレットのデフォルトのPathパラメーターは、特殊文字に問題があることが知られています。ただし、LiteralPathはすべての文字をサポートする必要があり、多くの場合、お持ちの問題を解決します。

Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }

方法2:フォルダーにショートネーム( 8.3ファイル名 )を使用することができます。これはcmd.exeアプローチです。 cmd /c " YOUR COMMAND "内に2つのコマンドをラップして、PowerShellで実行することもできます。

D:\> dir /x
 Volume in drive D is Storage
 Volume Serial Number is *******

 Directory of D:\

12.01.2014  12:29    <DIR>          APPLEI~1     Apple iOS 7 GM


D:\> rd /s d:\APPLEI~1
 d:\applei~1, Are you sure (Y/N)? y

方法3[〜#〜] wmi [〜#〜] アプローチが機能するかどうかも確認できます。

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name = 'C:\\holds bad subdir\\20120530-04'"
$fold

何も返されない場合は、ファイル名の最後にスペースを追加してみてください。オブジェクトを返す場合は、次を実行します:

$fold.Delete()

末尾にスペースがある場合とない場合の両方でオブジェクトが返されない場合は、ワイルドカードを使用して次の方法を試してください(実行には1〜15分かかります)。

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name like 'C:\\holds bad subdir\\20120530-04%'"
$fold

正しいフォルダーが返されたら削除します。

$fold.Delete()
2
Frode F.

やってみました

rd "C:\holds bad subdir\20120530-04 "

または

rd/s "C:\ holds bad subdir"

ファイルを削除したdelを試したが、ディレクトリを削除するrdまたはその同義語rmdirについては触れていません。

1
Magoo

親ディレクトリから、次の操作を行い、CMDが実行している有用な翻訳をだますことを期待します。

for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"

(あなたがそこにいる間、"%~si"ターゲットとしても...)

0
Magoo

Live Linux Ubuntu CDROMを起動して、そのファイルマネージャーの動作を確認します。

Windowsでは、末尾のスペースはサポートされていませんが、先頭のスペースはサポートされています。

0
foxidrive