
Вот моя текущая структура папок на компьютере с Windows 7:
---myfoolder
|
+---nope
| \---nope
| nope.txt
|
+---wtf
| \---wtf
| wtf.txt
|
+---yep
| \---yep
| yep.txt
|
\---zomg
\---zomg
zomg.txt
В этой структуре на каждом уровне имеется дублирующаяся папка, например nope\nope
.
Я хотел бы переместить каждый файл в каждой папке на уровень выше, чтобы устранить этот дубликат (обратите внимание, что для простоты я указал по одному файлу в каждом каталоге, но файлов с разными расширениями может быть несколько).
Это то, что я пробовал с помощью 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
в mv
операторе , но это привело только к удалению файлов, оставив папки такими, какие они есть (к счастью, я настроил тестовую среду, прежде чем делать это!).
Что я упускаю? К сожалению, я совсем новичок в написании сценариев PS, спасибо.
решение1
Move-Item
принимает пути как строки, и при .directory.parent
приведении к строке это либо пустая строка, либо просто одно имя каталога, похоже, это не полный путь к родительской папке.
Пытаться:
$_.directory.parent.FullName
или
|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }