Problème: J'ai un sous-répertoire Windows 7 que je ne peux pas supprimer.
Alors que j'en connais d'autres ici, et beaucoup d'autres ailleurs sur Internet ont posé des questions sur cette classe générale de problème de système de fichiers Windows 7, ma question ici concerne spécifiquement la classe spécifique de fichiers non supprimables sur Windows 7 qui ont un espace de fin dans le nom du répertoire.
Existe-t-il un meilleur outil pour inspecter et/ou modifier mon système de fichiers (en hexadécimal si nécessaire)?
OS: J'utilise x64 professionnel et il est entièrement mis à jour.
Ce qui a été essayé: J'ai lu de nombreuses pages Web sur ce sujet et essayé de nombreuses solutions potentielles. J'ai étudié le problème le plus récemment en utilisant PowerShell qui semble être pleinement capable de gérer les internes du système. À ce stade, je cherche quelque chose comme un éditeur hexadécimal pour le système de fichiers.
Ce qui n'est pas causé par:
Ce qui n'est pas corrigé par:
< - Less than symbol > - Greater than symbol : - Colon " - Quotation Mark / - Forward Slash | - Vertical Bar ? - Question mark * - Asterisk
Qu'est-ce qui l'a causé? Dans mon cas, le sous-répertoire non supprimable a été créé il y a quelques mois avec une personnalisation [~ # ~] php [~ # ~] programme que j'utilise pour les sauvegardes de l'arborescence source. Il semble qu'il y ait un espace ou un autre mauvais caractère dans le nom, mais je ne peux pas en être sûr. Il est visible dans un répertoire de fichiers, mais n'est pas disponible pour supprimer, renommer, rmdir, etc.
Enquête: Je peux le déplacer sur mon système de fichiers et l'avoir placé dans un sous-répertoire appelé, 'hold bad subdir' sur C :.
Ici, vous pouvez le voir avec PowerShell . Je le montre d'abord avec un Get-ChildItem (qui est le même que l'alias '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
Si j'essaie de le supprimer dans une fenêtre cmd en tapant 'del "2' + tab, il complète l'expansion du nom de fichier comme suit: del" 20120530-04 ", montrant qu'il y a un espace à la fin du nom du répertoire. Lorsque j'exécute cette commande, le résultat est:
Impossible de trouver C:\contient un sous-répertoire incorrect\20120530-04
Si j'essaie de le supprimer avec del 2 *, le système revient comme s'il l'avait supprimé, mais ne le fait pas.
Si j'exécute cette même commande dans PowerShell, et également avec l'option Force
, elle signale: "Un objet au chemin spécifié C:\contient un mauvais sous-répertoire\20120530-04 n'existe pas.", Comme suit:
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
C'est assez étrange parce que le répertoire peut le voir clairement, mais aucune méthode ne peut apparemment le voir ou ne peut pas lui être appliquée.
Je peux également afficher le sous-répertoire non supprimable dans l'Explorateur Windows . Quand je le parcoure, il dit: "ce dossier est vide". Et si j'essaye de le supprimer, j'obtiens:
De plus, si je consulte les propriétés de ce dossier, je constate que le nom est "20120530-04", c'est-à-dire avec un espace supplémentaire à la fin.
Il est également intéressant de noter que l'onglet Sécurité signale "(X) Les informations de sécurité demandées ne sont pas disponibles ou ne peuvent pas être affichées."
Et ce n'est pas en lecture seule, ni caché.
Portée du problème: Maintenant, ce n'est pas un gros problème, il est facile d'enterrer ce sous-répertoire dans un sous-répertoire -répertoire et ne vous en faites pas.
Mais pour moi, cela est devenu un défi intellectuel et en partie un moyen d'en savoir plus sur les tripes de Windows 7. Je suppose que je suis étonné qu'un tel bogue dans Windows puisse exister à un niveau aussi bas, et avec autant de systèmes installés dans le monde. Il est difficile à ce stade de savoir s'il s'agit d'un bogue Windows, de mauvaises données (qu'un bogue a laissé entrer) ou simplement de mauvaises données.
Selon Vous ne pouvez pas supprimer un fichier ou un dossier sur un volume de système de fichiers NTFS (nécessite JavaScript pour s'afficher), ce qui suit devrait fonctionner (notez qu'il utilise un chemin UNC ).
rd "\\?\C:\holds bad subdir\20120530-04 "
Assurez-vous de le faire avec cmd.exe. Il ne semble pas fonctionner avec PowerShell Remove-Item (rd).
Regarde aussi:
J'ai quelques suggestions.
Méthode 1 : Le paramètre par défaut Path
dans les applets de commande est connu pour avoir des problèmes avec les caractères spéciaux. LiteralPath
devrait cependant prendre en charge tous les caractères et résout souvent des problèmes comme celui que vous avez.
Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }
Méthode 2 : vous pouvez essayer d'utiliser le nom abrégé ( 8.3 nom de fichier ) pour le dossier. C'est un cmd.exe
approche. Vous pouvez également envelopper les deux commandes dans cmd /c " YOUR COMMAND "
pour les exécuter dans 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
Méthode 3 : Vous pouvez également voir si une approche WMI fonctionne:
#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
Si cela ne renvoie rien, essayez d'ajouter un espace à la fin du nom de fichier. S'il renvoie un objet, exécutez:
$fold.Delete()
Si elle ne retourne pas un objet avec et sans l'espace à la fin, essayez l'approche suivante en utilisant un caractère générique (cela peut prendre de 1 à 15 minutes pour s'exécuter).
#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
Et supprimez-le s'il renvoie le bon dossier:
$fold.Delete()
As-tu essayé
rd "C:\holds bad subdir\20120530-04 "
ou
rd/s "C:\contient un mauvais sous-répertoire"
Vous dites que vous avez essayé del
qui a supprimé des fichiers, mais vous n'avez pas mentionné rd
ou son synonyme rmdir
qui supprime les répertoires.
À partir du répertoire parent, procédez comme suit, en espérant tromper toute traduction utile que CMD
fait:
for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"
(Pendant que vous y êtes, cela ne ferait pas de mal d'essayer "%~si"
comme cible aussi ...)
Démarrez un CD-ROM Ubuntu Live Linux et voyez comment fonctionne ce gestionnaire de fichiers.
Windows n'est pas censé prendre en charge les espaces de fin, mais prend en charge les espaces de début.