Wie lösche ich einen Ordner, dessen Name mit einem Punkt (".") Endet?

85

Ich habe einige Ordner von Malware erstellt, deren Name mit einem Punkt wie C:\a.\oder C:\b.\usw. endete .

Ich habe eine Lösung gefunden, die einen solchen Ordner mit einem Befehl entfernen kann, rd /q /s "C:\a.\"aber wenn ich die Win-API aufrufe RemoveDirectory, wird sie zurückgegeben ERROR_FILE_NOT_FOUND.

Und ich frage mich nur, wie man eine Funktion schreibt, um ein solches Verzeichnis zu löschen, danke

Ich teste auf meinem eigenen Windows XP SP3-System wie folgt

Erstellen Sie einen Ordner C:\>mkdir a..\\\und ich kann nicht doppelklicken, um auf diesen Ordner zuzugreifen. und ich kann mit Befehl entfernen rd /q /s "C:\a.\"

Welche Windows-System-APIs rd /q /sruft dieser Befehl auf?

jerry.liu
quelle
Ich kann nicht glauben, dass dies in Windows 10 immer noch durch Windows Update selbst geschieht (es konnte die Windows.old nach dem Update nicht löschen).
Verdammtes Gemüse

Antworten:

142

Hier ist eine Lösung für dieses Problem :

rd /s "\\?\C:\Documents and Settings\User\Desktop\Annoying Folder."
Skilldrick
quelle
1
Die Frage möchte, dass eine API-Funktion den Ordner entfernt, und gibt an, dass er mit entfernt werden kann rd.
Jcl
4
Fair genug - vielleicht ist es deshalb nicht als akzeptierte Antwort markiert, aber es ist trotzdem sehr nützlich für diejenigen, die mit dem gleichen Problem konfrontiert sind, aber wo wir rd verwenden können.
David.Barkhuizen
2
Du hast gerade meine Nerven gerettet. Danke dir! : D
Benny Neugebauer
8
Beachten Sie, dass dies nur von CMD.exe NICHT PowerShell
Lorne K
2
Versuchen Sie auch, CMD.exeim Administratormodus zu arbeiten, wenn dies nicht in der nicht erhöhten Eingabeaufforderung funktioniert
Greg
63

Lösung: Wenn Sie RemoveDirectory aufrufen, stellen Sie sicher, dass Sie dem Pfad die Zeichenfolge " \\?\" voranstellen .


Erklärung: Es hat alles mit dem Punkt zu tun. Laut MSDN gibt es bestimmte Fälle, in denen Sie eine Datei oder einen Ordner auf einem NTFS-Volume möglicherweise nicht löschen können, insbesondere wenn der Dateiname im Win32-Namensraum ungültig ist (weshalb Sie die Datei nicht mit dem öffnen können normale Methoden im Windows Explorer).

Sie können eine Datei möglicherweise nicht löschen, wenn der Dateiname einen ungültigen Namen enthält (z. B. hat der Dateiname ein Leerzeichen oder einen Leerzeichen oder der Dateiname besteht nur aus einem Leerzeichen). Verwenden Sie zur Behebung dieses Problems ein Tool, das die entsprechende interne Syntax zum Löschen der Datei verwendet. Sie können die Syntax "\\? \" Mit einigen Tools verwenden, um diese Dateien zu bearbeiten, zum Beispiel:
del "\\? \ c: \ path_to_file_that enthält eine nachgestellte space.txt"
Die Ursache für dieses Problem ist ähnlich wie bei Ursache 4. Wenn Sie jedoch zum Öffnen einer Datei, deren Name nachgestellte Leerzeichen oder nachgestellte Punkte enthält, die typische Win32-Syntax verwenden, werden die nachgestellten Leerzeichen oder Punkte nach dem Öffnen der eigentlichen Datei entfernt. Wenn Sie zwei Dateien im selben Ordner mit den Namen "AFile.txt" und "AFile.txt" haben (beachten Sie das Leerzeichen nach dem Dateinamen), öffnen Sie die Datei, wenn Sie versuchen, die zweite Datei mithilfe von Standard-Win32-Aufrufen zu öffnen erste Datei stattdessen. Wenn Sie eine Datei haben, deren Name nur "" (ein Leerzeichen) ist und Sie versuchen, sie mit Standard-Win32-Aufrufen zu öffnen, öffnen Sie stattdessen den übergeordneten Ordner der Datei. Wenn Sie in dieser Situation versuchen, die Sicherheitseinstellungen für diese Dateien zu ändern, können Sie dies entweder nicht oder Sie können die Einstellungen für verschiedene Dateien unerwartet ändern.

(Quelle: http://support.microsoft.com/?kbid=320081 )

Cody Grey
quelle
Ich habe perfekt gearbeitet, um eine Datei zu löschen, deren Name mit "." Endet. Vielen Dank !
Nach dem
1
Es funktionierte, del auf rd like zu rd "\\?\C:\Users\ahmed\Desktop\buggy."
wechseln
Dies funktioniert hervorragend auf cmd, aber gibt es ein Äquivalent für PowerShell? rdin pwsh ist ein Alias, der remove-item"\\? \" nicht unterstützt.
Kagami Sascha Rosylight
1
Sicher tut es das. Ich habe gerade PowerShell's Rd verwendet, um eine solche Datei zu löschen, und es hat einwandfrei funktioniert. Überprüfen Sie Ihre Syntax.
SilverbackNet
Beeindruckend. Ich bin über dieses Problem gestolpert, als ich versucht habe, eine Verarbeitung in natürlicher Sprache für ein Dataset durchzuführen (jede Datei im Dataset hat den Namen {IncrementalNumber}.), und ich war sehr verwirrt darüber, warum meine Datenverarbeitungsskripte fehlgeschlagen sind. Dies ist jetzt sinnvoll, aber es scheint, dass das Verhalten so unerwartet ist, dass es Sicherheitsauswirkungen haben kann, weil Anwendungen Dateinamen falsch behandeln, die in einem Leerzeichen oder Punkt enden.
Spencer D
46

Ich habe dies auf SU gepostet und ich habe beschlossen, es auch hier zu posten. Dies ist der einfachste, schnellste und einfachste Weg, dies zu erreichen. Ich lache jetzt darüber, wie einfach es ist.

  1. Installieren Sie WinRAR
  2. Befolgen Sie die Schritt-für-Schritt-Anleitung aus den Bildern:
  3. Geben Sie hier die Bildbeschreibung ein
  4. Geben Sie hier die Bildbeschreibung ein
  5. Geben Sie hier die Bildbeschreibung ein
  6. Geben Sie hier die Bildbeschreibung ein

Ich selbst hatte WinRaR installiert und beschloss, die Problemumgehung darin zu demonstrieren.
Diese Problemumgehung ist auch mit 7zip möglich.

Eine andere Sache, die ich erwähnen sollte, ist, dass das Problem anscheinend durch die Verwendung des Windows Explorers verursacht wird und jeder andere Dateibrowser (wie der WinRAR-Dateibrowser selbst, FTP-Explorer usw.) diese Dateien wie gewohnt behandelt.
Sie können versuchen, einen beliebigen Dateibrowser zu verwenden und diese Dateien einfach zu löschen, ohne sie zu archivieren! Prost!

AmirHossein
quelle
5
Was für eine kreative Lösung!
Nosgoroth
7

Wenn Sie sehen, ist der Name "a.", Aber der tatsächliche Name ist "a .."

Versuche dies:

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

Und Sie können versuchen, den Ordner mit diesem Code zu erkunden:

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

Wenn Sie Git installiert haben (Sie können ir von hier bekommen ), dann ist es so einfach wie:

  1. Navigieren Sie im Datei-Explorer zu dem Speicherort, an dem sich der problematische Ordner befindet.
  2. Kontextmenü (rechte Maustaste)> Git Bash Here.
  3. rm -rf Foldername./
Laurynas Lazauskas
quelle
rm: cannot remove ‘.bin’: Directory not empty
Grün
@Green Wenn Sie zum Löschen von Ordnerinhalten berechtigt sind, sollte sich das -rfTeil um den Ordnerinhalt kümmern.
Laurynas Lazauskas
4

Ich habe " WinRar " verwendet. Ein einfacher RAR-ZIP-Prozessor. Sie können jede Art von Dateinamen-Editor verwenden. Öffnen Sie einfach das Verzeichnis, in dem sich Ihre Datei befindet, in WinRar und wählen Sie Umbenennen, nachdem Sie mit der rechten Maustaste auf die Datei / den Ordner geklickt haben, die bzw. den Sie umbenennen möchten, und geben Sie den neuen Namen ein.

arisch
quelle
Wie soll das helfen?
Tavo
1
Hilft Ihnen beim Durchsuchen der Datei / des Ordners und beim Umbenennen der Datei in was auch immer ... und fertig.
Aryan
1
Das hat mir tatsächlich geholfen; Ich hatte WinRar verwendet, um eine Reihe von Dateien zu entpacken, von denen eine einen Ordner enthielt, der in einem Punkt endete. Windows konnte es nicht löschen oder wirklich umbenennen, aber ich konnte es problemlos in WinRar umbenennen und dann im Windows Explorer löschen (Win 10). Vielen Dank!
Nick May
2

Versuchen Sie, mit dem Entsperrprogramm Dateien und Ordner zu löschen, die Sie normalerweise nicht löschen können.

RyuuGan
quelle
3
Ich bin gespannt, wie Unlocker das machen kann!
jerry.liu
0

Verwenden Sie den Befehl bash rm von Ubuntu unter Windows 10

Kreker
quelle
rm: cannot remove ‘.bin’: Directory not empty
Grün
0

Wenn Sie die Dateien behalten möchten, gibt es auch Optionen in Bash.
Sie benötigen das Windows Subsystem für Linux-Paket (ich habe Ubuntu installiert)

um die Dateien zu behalten. Öffnen Sie eine Eingabeaufforderung und fahren Sie mit der CD dahin, wo sich die Datei oder der Ordner befindet. Geben Sie
jetzt " bash" ein
, um Bash in der Eingabeaufforderung zu öffnen. mv '[folder or file you want to move]' '[new name (can include path)]'Geben Sie jetzt ein (es gibt mehr zu mv. Wenn Sie also alle Optionen nachlesen möchten, indem Sie 'man mv' verwenden, wird die Handbuchseite geöffnet (verwenden Sie dann q, um zu bash zurückzukehren).)
der Befehl mv kurz für move, aber its hat eine sekundäre Funktion beim Umbenennen von Dingen.
Verwenden Sie auch in Bash 'einfache Anführungszeichen' und kein normales "doppeltes Anführungszeichen", da bash 'einfache Anführungszeichen' erwartet.

Hier ist ein Beispiel. Angenommen, Ihr Ordner hat den Namen " data 1." in c:\users(der vollständige Pfad zum Fehlerordner lautet also c:\users\data 1.
1. Öffnen Sie die Eingabeaufforderung mit einer beliebigen Methode
2. Geben Sie cd c:\users
3 ein. bashGeben Sie nun diese Lade-Bash in den Ordner ein, in dem Sie sich zuvor befanden.
4. Geben Sie schließlich mv 'data 1.' 'data 1'
5 ein. Der Ordner ist jetzt zugänglich und Sie können ihn löschen.

mer2329
quelle