Mover o conteúdo da pasta para a pasta pai

0

Esta é a 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, há uma pasta duplicada em cada camada, como nope\nope .

Gostaria de mover cada arquivo em cada pasta até um nível para eliminar essa duplicata (observe que, para simplificar, listei 1 arquivo em cada diretório, mas pode haver vários arquivos com diferentes extensões).

Isso é o que eu tentei com o powershell desta 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 filha, tentei também fornecer um -Force na instrução mv , mas ele só conseguiu realmente apagar os arquivos deixando as pastas como eles são (por sorte eu configurei um ambiente de teste antes de fazer isso!).

O que estou perdendo? Infelizmente eu sou realmente um novato em scripts PS, obrigado.

    
por Gruber 21.10.2016 / 03:18

1 resposta

2

Move-Item usa caminhos como strings e, quando .directory.parent converte para uma string, é uma string vazia ou apenas um nome de diretório, não parece ser o caminho completo para a pasta pai.

Tente:

$_.directory.parent.FullName

ou

|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }
    
por 21.10.2016 / 07:45