
이것은 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) }