我刚刚开始涉猎Powershell,并在搜索了许多脚本之后,我还没有找到可行的方法。 (也许我运行不正常,但是我启用了正确的管理权限,等等。)
我的要求:一个Powershell脚本-递归地遍历目录结构,直到最后一级-将所有内容(具有任何扩展名的文件)从文件所在位置向上移动一级-移动后,删除文件从中移动的那个文件夹
◘之前◘ 古典 ├─莫扎特-5 │└─莫扎特-欧洲作曲家 │├─01-symphony.mp3 │└─03-symphony.mp3 │ ├─巴赫7 │└─巴赫 │├─02-symphony.ogg │└─04-concerto.wav │ │ └─Vivaldi-2 └─维瓦尔第浏览器 ├─01-track.m4a └─02-solo.mp4 ================================================== ◘之后◘ 古典 ├─莫扎特-5 │├─01-symphony.mp3 │└─03-symphony.mp3 │ ├─巴赫7 │├─02-symphony.ogg │└─04-concerto.wav │ └─Vivaldi-2 ├─01-track.m4a └─02-solo.mp4
笔记:-基本文件夹可以称为任何文件夹,例如古典,摇滚等(因此,理想情况下,我将从所有子文件夹所在的基本文件夹内部运行Powershell脚本)-文件夹深度可能为1或多个级别的深度(99.9%的时间将达到2-3级深,即Root - Music
1st - _Classical_
2nd - Mozart-5
3rd - Mozart-European-Composers
1st - _Indian Classical_
2nd - Ravi
3rd - Ravi Masterpieces
2nd - Zakir
3rd - Zakir-Solo-Piece
这在我的测试中有效。
Clear-Host
$BaseDir = "G:\Test\America"
$GCIArgs = @{Path = "$BaseDir"
Exclude = "*.ini"
Recurse = $True}
$Files = Get-childitem @GCIArgs
$Files | Where-Object {-not $_.PSIsContainer} |
Move-Item -Destination "$BaseDir"
$Files | Where-Object {$_.PSIsContainer} |
Remove-Item -Force -Recurse
注意:如果要保存.ini文件,可以摆脱Exclude参数。
HTH