名前がドット(「。」)で終わっているフォルダを削除するにはどうすればよいですか?


89

名前がC:\a.\C:\b.\などのドットで終わっているマルウェアによって作成されたフォルダがいくつかあります。

コマンドでそのようなフォルダを削除できる解決策を見つけましたrd /q /s "C:\a.\"が、win APIを呼び出すとRemoveDirectory、が返されますERROR_FILE_NOT_FOUND

そして、私はそのようなディレクトリを削除する関数をどのように書くのか疑問に思います、ありがとう

私はこのような自分のWindowsXPSP3システムでテストします

フォルダC:\>mkdir a..\\\を作成し、ダブルクリックしてこのフォルダにアクセスできません。コマンドで削除できます rd /q /s "C:\a.\"

そのrd /q /sコマンドが呼び出すWindowsシステムAPIは何ですか?


これがWindows10でも、Windows Update自体によって発生することは信じられません(更新後にWindows.oldを削除できませんでした)。
くそ野菜

回答:


147

この問題の解決策は次のとおりです。

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."

1
質問では、API関数でフォルダーを削除する必要があり、rd。で削除できると述べています。
jcl 2014年

4
十分に公平です-おそらくそれが受け入れられた答えとしてマークされていない理由ですが、それでも同じ問題に悩まされているがrdを使用できる使用者にとっては非常に便利です。
david.barkhuizen 2015

2
あなたは私の神経を救った。ありがとうございました!:D
Benny Neugebauer 2015年

8
これは、PowerShellではなくCMD.exeからのみ機能することに注意してください
Lorne K

2
またCMD.exe、昇格されていないコマンドプロンプトで機能しない場合は、管理者モードでも実行してみてください
greg 2017

63

解決策: RemoveDirectoryを呼び出すときは、パスの前に文字列「\\?\」を付けるようにしてください。


説明: それはドットと関係があります。MSDNによると、NTFSボリューム上のファイルまたはフォルダーを削除できない場合があります。特に、Win32名前空間でファイル名が無効な場合(そのため、を使用してファイルを開くことができません)。 Windowsエクスプローラーの通常の方法)。

ファイル名に無効な名前が含まれている場合(たとえば、ファイル名の末尾にスペースまたは末尾のピリオドがある場合、またはファイル名がスペースのみで構成されている場合)、ファイルを削除できない場合があります。この問題を解決するには、適切な内部構文を使用してファイルを削除するツールを使用します。これらのファイルを操作するために、いくつかのツールで「\\?\」構文を使用できます。次に例を示します。
del "\\?\ c:\ path_to_file_thatには末尾のspace.txtが含まれています"
この問題の原因は原因4と同様です。ただし、通常のWin32構文を使用して、名前に末尾のスペースまたは末尾のピリオドが含まれるファイルを開くと、実際のファイルを開く前に末尾のスペースまたはピリオドが削除されます。したがって、「AFile.txt」と「AFile.txt」という名前の同じフォルダーに2つのファイルがある場合(ファイル名の後のスペースに注意)、標準のWin32呼び出しを使用して2番目のファイルを開こうとすると、代わりに最初のファイル。同様に、名前が「」(スペース文字)だけのファイルがあり、標準のWin32呼び出しを使用してファイルを開こうとすると、代わりにファイルの親フォルダーを開きます。この状況で、これらのファイルのセキュリティ設定を変更しようとすると、これを実行できないか、別のファイルの設定を予期せず変更する可能性があります。

(出典:http//support.microsoft.com/?kbid = 320081


名前が「。」で終わるファイルを削除するために私のために巧みに働きました。どうもありがとうございました !
AFract 2015年

1
それは、delからrdへの切り替えで機能しましたrd "\\?\C:\Users\ahmed\Desktop\buggy."
guneysus 2015

これはcmdでうまく機能しますが、PowerShellに相当するものはありますか?rdpwshには、remove-item`\\?\`をサポートしないエイリアスがあります。
Kagami Sascha Rosylight 2017年

1
確かにそうです。PowerShellのrdを使用してそのようなファイルを削除したところ、問題なく機能しました。構文を再確認してください。
SilverbackNet 2018年

ワオ。データセットで自然言語処理を実行しようとしたときにこの問題に遭遇し(データセット内のすべてのファイルに名前が付けられています{IncrementalNumber}.)、データ処理スクリプトが失敗する理由について非常に混乱しました。これは今では理にかなっていますが、動作が予期しないものであるため、アプリケーションがスペースまたはピリオドで終わるファイル名を誤って処理するため、セキュリティに影響を与える可能性があります。
スペンサー

46

私はこれをSUに投稿しましたが、ここにも投稿することにしました。これを達成するための最も簡単で最速かつ最も簡単な方法です。私は今、それがどれほど単純であるかを笑っています。

  1. WinRARをインストールします
  2. 写真からステップバイステップの手順に従ってください:
  3. ここに画像の説明を入力してください
  4. ここに画像の説明を入力してください
  5. ここに画像の説明を入力してください
  6. ここに画像の説明を入力してください

私自身もWinRaRをインストールしていたので、その回避策を示すことにしました。
この回避策は、7zipを使用することでも可能です。

私が言及しなければならないもう1つのことは、問題はWindowsエクスプローラーの使用によって引き起こされているようであり、他のファイルブラウザー(winrarファイルブラウザー自体、ftpエクスプローラーなど)はこのファイルを通常どおりに処理することです。
任意のファイルブラウザを使用して、それらのファイルを削除するだけで、わざわざアーカイブする必要はありません。乾杯!


6
なんてクリエイティブな解決策でしょう。
Nosgoroth 2016

8

gitがインストールされている場合(ここからirを取得できます)、次のように簡単です。

  1. 問題のあるフォルダーがある場所にファイルエクスプローラーを移動します。
  2. コンテキストメニュー(マウスの右ボタン)> Git BashHere。
  3. rm -rf Foldername./

rm: cannot remove ‘.bin’: Directory not empty

@Greenフォルダーの内容を削除する権限がある場合、-rfパーツがフォルダーの内容を処理する必要があります。
Laurynas Lazauskas 2017年

7

名前は「a。」ですが、実際の名前は「a ..」です。

これを試して:

rd /q /s "C:\a..\"

そして、あなたはこのコードでフォルダを探索してみることができます:

for /f "tokens=3 delims=<>" %%a in ('dir /ad /x "C:\*" ^| findstr " a\.\.$"') do (
  for /f "tokens=1" %%b in ("%%a") do start "" "%%~fb"
)

5

シンプルなRAR、ZIPプロセッサ「WinRar」を使用しました。あらゆる種類のファイル名エディタを使用できます。ファイルがあるディレクトリをWinRarで開き、名前を変更するファイル/フォルダを右クリックして新しい名前を入力した後、[名前の変更]を選択するだけです。


それはどのように役立つはずですか?
タボ2015

1
ファイル/フォルダを参照し、ファイルの名前を何にでも変更するのに役立ちます...そして完了しました。
アーリア人

1
これは実際に私を助けました。私はWinRarを使用して一連のファイルを解凍しましたが、そのうちの1つにはピリオドで終わるフォルダーが含まれていました。Windowsはそれを削除することも、実際に名前を変更することもできませんでしたが、WinRarで問題なく名前を変更してから、Windowsエクスプローラー(win 10)で削除することができました。ありがとう!
ニック



0

ファイルを保持したい場合は、bashにもオプションがあります。
Linux用のWindowsサブシステムパッケージが必要になります(Ubuntuがインストールされています)

ファイルを保持します。コマンドプロンプトを開き、ファイルまたはフォルダーが配置されている場所に移動します。
ここで「bash
と入力すると、プロンプトでbashが開きます。ここで入力しますmv '[folder or file you want to move]' '[new name (can include path)]'(mvにはさらに多くのオプションがあるため、すべてのオプションを読みたい場合は「man mv」を使用すると、マニュアルページが開きます(次にqを使用してbashに戻ります))
mvコマンドはmoveの略ですが、名前を変更するという二次的な機能があります。
また、bashでは「一重引用符」を使用します。bashは「一重引用符」を想定しているため、通常の「二重引用符」ではありません。

ここに例があります。あなたのフォルダが「という名前の仮定data 1.にある」c:\usersエラーフォルダへのフルパスがあるので(c:\users\data 1.
いずれかの方法使用してプロンプトを開き、コマンド
2を入力しcd c:\users
、今入力3.bash以前にあったフォルダに、この負荷はbashを
最後に入力4. mv 'data 1.' 'data 1'
5。これでフォルダにアクセスできるようになり、削除することを選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.