将文件夹内容移动到父文件夹

将文件夹内容移动到父文件夹

这是 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}

我认为发生了一些可疑的事情,因为父文件夹和子文件夹之间存在重复的名称,我也尝试-Forcemv语句中提供一个,但它实际上只能删除文件而使文件夹保持原样(幸运的是我在此之前已经设置了一个测试环境!)。

我遗漏了什么?不幸的是,我真的是 PS 脚本的新手,谢谢。

答案1

Move-Item将路径作为字符串,当.directory.parent转换为字符串时,它要么是空字符串,要么只是一个目录名称,它似乎不是父文件夹的完整路径。

尝试:

$_.directory.parent.FullName

或者

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

相关内容