
Esta es mi estructura de carpetas actual en una máquina con Windows 7:
---myfoolder
|
+---nope
| \---nope
| nope.txt
|
+---wtf
| \---wtf
| wtf.txt
|
+---yep
| \---yep
| yep.txt
|
\---zomg
\---zomg
zomg.txt
En esta estructura hay una carpeta duplicada en cada capa como nope\nope
.
Me gustaría mover cada archivo en cada carpeta hacia arriba para eliminar este duplicado (tenga en cuenta que, en aras de la simplicidad, he enumerado 1 archivo en cada directorio, pero podría haber varios archivos con diferentes extensiones).
Esto es lo que he probado con powershellde esta respuesta:
gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}
Desafortunadamente recibo este error:
mv : Cannot create a file when that file already exists.
At line:1 char:35
+ gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}
Creo que algo sospechoso está sucediendo porque hay un nombre duplicado entre la carpeta principal y la secundaria. También intenté proporcionar un -Force
en la mv
declaración, pero solo logré borrar los archivos dejando las carpetas como están (afortunadamente, había configurado un ambiente de prueba antes de hacer esto!).
¿Qué me estoy perdiendo? Desafortunadamente, soy realmente un novato en secuencias de comandos de PS, gracias.
Respuesta1
Move-Item
toma rutas como cadenas, y cuando .directory.parent
se convierte en una cadena, es una cadena vacía o solo un nombre de directorio, no parece ser la ruta completa a la carpeta principal.
Intentar:
$_.directory.parent.FullName
o
|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }