폴더 내용을 상위 폴더로 이동

폴더 내용을 상위 폴더로 이동

이것은 Windows 7 컴퓨터의 현재 폴더 구조입니다.

---myfoolder
   |    
   +---nope              
   |   \---nope          
   |           nope.txt  
   |                     
   +---wtf               
   |   \---wtf           
   |           wtf.txt   
   |                     
   +---yep               
   |   \---yep           
   |           yep.txt   
   |                     
   \---zomg              
       \---zomg          
               zomg.txt  

이 구조에는 와 같이 각 레이어에 중복 폴더가 있습니다 nope\nope.

이 중복을 제거하기 위해 각 폴더의 각 파일을 한 수준 위로 이동하고 싶습니다. 단순화를 위해 각 디렉터리에 1개의 파일을 나열했지만 확장자가 다른 여러 파일이 있을 수 있습니다.

이것이 내가 Powershell로 시도한 것입니다.이 답변에서:

gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}

불행히도 다음 오류가 발생합니다.

mv : Cannot create a file when that file already exists.
At line:1 char:35
+ gci -R | ?{!$_.PSIsContainer} | %{mv $_.fullname $_.directory.parent}

-Force상위 폴더와 하위 폴더 사이에 중복된 이름이 있기 때문에 뭔가 수상한 일이 일어나고 있는 것 같습니다. 또한 설명문 에 a를 제공하려고 시도했지만 mv실제로는 폴더를 그대로 유지하는 파일만 삭제했습니다(다행히도 내가 설정한 이 작업을 수행하기 전에 환경을 테스트하십시오!).

내가 무엇을 놓치고 있나요? 불행히도 저는 PS 스크립팅의 초보자입니다. 감사합니다.

답변1

Move-Item경로를 문자열로 사용하고 .directory.parent문자열로 변환할 때 빈 문자열이거나 하나의 디렉터리 이름일 뿐이며 상위 폴더에 대한 전체 경로가 아닌 것 같습니다.

노력하다:

$_.directory.parent.FullName

또는

|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }

관련 정보