这是 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
Move-Item
将路径作为字符串,当.directory.parent
转换为字符串时,它要么是空字符串,要么只是一个目录名称,它似乎不是父文件夹的完整路径。
尝试:
$_.directory.parent.FullName
或者
|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }