
Esta é minha estrutura de pastas atual em uma máquina com Windows 7:
---myfoolder
|
+---nope
| \---nope
| nope.txt
|
+---wtf
| \---wtf
| wtf.txt
|
+---yep
| \---yep
| yep.txt
|
\---zomg
\---zomg
zomg.txt
Nesta estrutura existe uma pasta duplicada em cada camada como nope\nope
.
Gostaria de mover cada arquivo em cada pasta para um nível acima para eliminar essa duplicata (observe que, para simplificar, listei 1 arquivo em cada diretório, mas pode haver vários arquivos com extensões diferentes).
Isso é o que eu tentei com o PowerShelldesta resposta:
gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}
Infelizmente estou recebendo este erro:
mv : Cannot create a file when that file already exists.
At line:1 char:35
+ gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}
Acho que algo suspeito está acontecendo porque há um nome duplicado entre a pasta pai e a pasta filho, tentei também fornecer um -Force
na mv
instrução, mas só consegui apagar os arquivos, deixando as pastas como estão (por sorte, eu configurei um ambiente de teste antes de fazer isso!).
o que estou perdendo? Infelizmente sou realmente um novato em scripts PS, obrigado.
Responder1
Move-Item
usa caminhos como strings e, quando .directory.parent
convertido em uma string, é uma string vazia ou apenas um nome de diretório, não parece ser o caminho completo para a pasta pai.
Tentar:
$_.directory.parent.FullName
ou
|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }