24

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

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

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


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

試したこと:このテーマに関する多くの Web ページを読み、考えられる多くの解決策を試しました。私は最近、システム内部を完全に処理できると思われる 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 などはできません。

調査:ファイル システム上で移動でき、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

'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で削除できないサブディレクトリを表示することもできます。ブラウズすると、「このフォルダは空です」と表示されます。そこで削除しようとすると、次のようになります。

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください

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

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


問題の範囲:現在、これは大きな問題ではありません。このサブディレクトリを邪魔にならないサブディレクトリ内に埋め込むのは簡単で、気にする必要はありません。

しかし、私にとってこれは知的な挑戦であり、部分的には Windows 7 の根性についてもっと学ぶ方法でもあります。Windows のこのようなバグがこれほど低いレベルで存在し、非常に多くのシステムがインストールされていることに驚いていると思います。世界。現時点では、これが Windows のバグなのか、不良データ (バグが入り込んだ) なのか、単なる不良データなのかを判断するのは困難です。

4

5 に答える 5

88

You cannot delete a file or a folder on an NTFS file system volume (requires JavaScript to display) によると、次のように動作するはずです ( UNCパスを使用していることに注意してください)。

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

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

以下も参照してください。

于 2014-01-12T12:04:39.713 に答える
2

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

方法 1 : コマンドレットの既定のPathパラメーターには、特殊文字に関する問題があることが知られています。LiteralPathただし、すべての文字をサポートする必要があり、多くの場合、あなたが抱えているような問題を解決します.

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

方法 2 : フォルダに短い名前 ( 8.3 ファイル名)を使用してみることができます。これはcmd.exeアプローチです。2 つのコマンドを内部cmd /c " YOUR COMMAND "にラップして、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()
于 2014-01-12T09:54:20.330 に答える
1

やってみました

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

また

rd /s "C:\holds bad subdir"

どのファイルを削除したかを試したと言いますが、ディレクトリを削除するその同義語delについては言及していません。rdrmdir

于 2014-01-12T08:45:05.770 に答える