Это моя текущая структура папок на компьютере с 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 в выражении mv но ему удалось только стереть файлы, оставив папки, как они есть (к счастью, я Я настроил тестовую среду перед этим!).

Что мне не хватает? К сожалению, я действительно новичок в написании сценариев PS, спасибо.

1 ответ1

2

Move-Item принимает пути в виде строк, и когда .directory.parent в строку, это либо пустая строка, либо только одно имя каталога, но не полный путь к родительской папке.

Пытаться:

$_.directory.parent.FullName

или же

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .