
這是我在 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
聲明中提供a ,但它只能真正刪除文件,使資料夾保持原樣(幸運的是,我設定了一個在執行此操作之前測試環境!
我缺什麼?不幸的是我真的是PS腳本新手,謝謝。
答案1
Move-Item
將路徑作為字串,當.directory.parent
轉換為字串時,它要么是一個空字串,要么只是一個目錄名稱,它似乎不是父資料夾的完整路徑。
嘗試:
$_.directory.parent.FullName
或者
|%{ mv $_.FullName (Split-Path -Parent $_.Directory) }