問題:削除できないWindows 7サブディレクトリがあります。
私はここで他の人を知っていますが、インターネット上の他の多くがこの一般的なクラスのWindows 7ファイルシステムの問題について質問していますが、ここでの私の質問は特にディレクトリ名の末尾のスペース。
ファイルシステムを検査および/または編集するためのより良いツールがありますか(必要に応じて16進数で)?
OS: x64 Professionalを実行していますが、完全に更新されています。
試されたこと:私はこの主題に関する多くのウェブページを読み、多くの潜在的な解決策を試してみました。私は最近、システム内部を完全に処理できると思われるPowerShellを使用して問題を研究しています。この時点で、ファイルシステム用の16進エディタのようなものを探しています。
原因:
修正されないもの:
< - 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 で削除不可能なサブディレクトリを表示することもできます。ブラウズすると、「このフォルダーは空です」と表示されます。そして、そこで削除しようとすると、次のようになります:
また、このフォルダーのpropertiesを表示すると、名前が「20120530-04」、つまり末尾に余分なスペースがあることがわかります。
また興味深いことに、[セキュリティ]タブには「(X)要求されたセキュリティ情報が利用できないか、表示できません。」と報告されます。
また、読み取り専用ではなく、非表示でもありません。
問題の範囲:さて、これは大きな問題ではありません。このサブディレクトリをすぐに外れたサブディレクトリに埋めることは簡単で、心配する必要はありませんそれ。
しかし、私にとってこれは知的挑戦になり、一部はWindows g7の根源についてより詳しく知る方法になりました。Windowsのこのようなバグは非常に低いレベルで存在し、非常に多くのシステムが世界。現時点では、これがWindowsのバグなのか、不正なデータ(バグが取り込む)なのか、あるいは単なる不正なデータなのかを知るのは困難です。
NTFSファイルシステムボリューム上のファイルまたはフォルダーを削除することはできません(表示するにはJavaScriptが必要)、動作するはずです( [〜#〜] unc [〜#〜] パスを使用していることに注意してください)。
rd "\\?\C:\holds bad subdir\20120530-04 "
必ずcmd.exeでこれを実行してください。 PowerShellの Remove-Item (rd)では動作しないようです。
こちらもご覧ください:
いくつかの提案があります。
方法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()
やってみました
rd "C:\holds bad subdir\20120530-04 "
または
rd/s "C:\ holds bad subdir"
ファイルを削除したdel
を試したが、ディレクトリを削除するrd
またはその同義語rmdir
については触れていません。
親ディレクトリから、次の操作を行い、CMD
が実行している有用な翻訳をだますことを期待します。
for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"
(あなたがそこにいる間、"%~si"
ターゲットとしても...)
Live Linux Ubuntu CDROMを起動して、そのファイルマネージャーの動作を確認します。
Windowsでは、末尾のスペースはサポートされていませんが、先頭のスペースはサポートされています。