powershell - recursively - No se puede eliminar una carpeta en Windows 7 con un espacio al final
rmdir directory not empty windows (5)
Problema: tengo un subdirectorio de Windows 7 que no puedo eliminar.
Aunque conozco a otros aquí, y muchos más en otras partes de Internet han preguntado sobre esta clase general de problemas del sistema de archivos de Windows 7, mi pregunta aquí se relaciona específicamente con la clase específica de archivos que no se pueden eliminar en Windows 7 que tienen un espacio final en el nombre del directorio.
¿Existe una mejor herramienta para inspeccionar y / o editar mi sistema de archivos (en hexadecimal si es necesario)?
SO: estoy ejecutando x64 profesional y está completamente actualizado.
Lo que se ha intentado: he leído muchas páginas web sobre este tema y he probado muchas soluciones potenciales. He estado estudiando el problema más recientemente utilizando PowerShell, que parece ser completamente capaz de lidiar con los aspectos internos del sistema. En este punto estoy buscando algo como un editor hexadecimal para el sistema de archivos.
Lo que no es causado por:
- un nombre de archivo largo, o
- por estar ubicado en un largo camino,
Lo que no está arreglado por:
- Renombrando usando el antiguo esquema de nombres de archivo de DOS
- Ejecutando CHKDSK de todo el sistema de archivos
- Cerrar todos los demás programas a los que se pueda acceder
- Desactivar el software antivirus
- Usando la utilidad Delinvfile.exe 4.5. Nota: Delinvfile dice que no puede arreglar "Archivos y carpetas con un nombre corto que contiene caracteres no válidos. Estos incluyen los caracteres [que no están permitidos en los nombres de archivo]:
< - Less than symbol > - Greater than symbol : - Colon " - Quotation Mark / - Forward Slash | - Vertical Bar ? - Question mark * - Asterisk
¿Qué lo causó? En mi caso, el subdirectorio no eliminable se creó hace algunos meses con un programa PHP personalizado que utilizo para las copias de seguridad del árbol de origen. Parece que tiene un espacio u otro mal carácter en el nombre, pero no puedo estar seguro. Es visible en un directorio de archivos, pero no está disponible para eliminar, renombrar, rmdir, etc.
Investigación: Puedo moverlo en mi sistema de archivos y lo he colocado dentro de un subdirectorio llamado, "contiene el subdirectorio malo" en C :.
Aquí puedes verlo con PowerShell . Primero lo muestro con un Get-ChildItem (que es el mismo que el 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 trato de eliminarlo en una ventana de cmd escribiendo ''del "2'' + tab, se completa la expansión del nombre de archivo de la siguiente manera: del" 20120530-04 ", mostrando que hay un espacio al final del nombre del directorio. Cuando ejecuto este comando el resultado es:
No se pudo encontrar C: / contiene un subdirectorio / 20120530-04
Si trato de eliminarlo con del 2 *, el sistema vuelve como si lo hubiera eliminado, pero no lo hace.
Si emito este mismo comando en PowerShell, y también con la opción Force
, informa: "Un objeto en la ruta de acceso especificada C: / contiene el subdirectorio / 20120530-04 no existe", como sigue:
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
Esto es algo extraño porque el directorio puede verlo claramente, pero cualquier método aparentemente no puede verlo o no se puede aplicar a él.
También puedo ver el subdirectorio que no se puede eliminar en Windows Explorer . Cuando lo busco, dice "esta carpeta está vacía". Y si intento borrarlo allí obtengo:
Además, si veo las propiedades de esta carpeta, puedo ver que el nombre es "20120530-04", es decir, con un espacio adicional al final.
También es interesante que la pestaña Seguridad informa "(X) La información de seguridad solicitada no está disponible o no se puede mostrar".
Y no es de solo lectura, ni oculto.
Ámbito del problema: ahora, esto no es un gran problema, es fácil de enterrar este subdirectorio dentro de un subdirectorio alejado y simplemente no preocuparse por ello.
Pero para mí, esto se ha convertido en un desafío intelectual y, en parte, en una forma de aprender más acerca de las agallas de Windows 7. Supongo que me sorprende que tal error en Windows pueda existir a un nivel tan bajo y con tantos sistemas instalados en Windows. el mundo. Es difícil en este punto saber si se trata de un error de Windows, datos incorrectos (que un error deja pasar) o simplemente datos incorrectos.
De acuerdo con No puede eliminar un archivo o una carpeta en un volumen del sistema de archivos NTFS (requiere JavaScript para mostrar), lo siguiente debería funcionar (aviso que utiliza una ruta UNC ).
rd "//?/C:/holds bad subdir/20120530-04 "
Asegúrese de hacer esto con cmd.exe. Parece que no funciona con el elemento de Remove-Item de PowerShell (rd).
Ver también:
Desde el directorio principal, haga lo siguiente, con la esperanza de engañar a cualquier traducción útil que CMD
esté haciendo:
for /f "delims=" %i in (''dir /b /ad'') do rd /s /q "%i"
(Mientras estés allí, no estaría mal intentar "%~si"
como objetivo también ...)
Has probado
rd "C:/holds bad subdir/20120530-04 "
o
rd / s "C: / tiene un subdirectorio malo"
Usted dice que ha intentado eliminar los archivos eliminados, pero no ha mencionado rd
o su sinónimo rmdir
que elimina directorios.
Inicie un Live Linux Ubuntu CDROM y vea cómo funciona ese administrador de archivos.
Se supone que Windows no admite espacios finales, pero sí admite espacios iniciales.
Tengo algunas sugerencias.
Método 1 : Se sabe que el parámetro de Path
predeterminado en los cmdlets tiene problemas con los caracteres especiales. LiteralPath
embargo, LiteralPath
debe admitir todos los caracteres y, a menudo, resuelve problemas como el que tiene.
Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }
Método 2 : puede intentar usar el nombre corto ( nombre de archivo 8.3 ) para la carpeta. Este es un enfoque de cmd.exe
. También puede envolver los dos comandos dentro de cmd /c " YOUR COMMAND "
para ejecutarlos en 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étodo 3 : También puede ver si un enfoque WMI funciona:
#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 esto no devuelve nada, intente agregar un espacio al final en el nombre del archivo. Si devuelve un objeto, ejecute:
$fold.Delete()
Si no devuelve un objeto con y sin el espacio al final, intente el siguiente apporach usando comodines (esto puede demorar de 1 a 15 minutos en ejecutarse).
#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
Y elimínelo si devuelve la carpeta correcta:
$fold.Delete()