Powershell:将文件从源目录递归移动到上一级

问题描述 投票:1回答:1

我刚刚开始涉猎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 - Music1st - _Classical_2nd - Mozart-53rd - Mozart-European-Composers1st - _Indian Classical_2nd - Ravi3rd - Ravi Masterpieces2nd - Zakir3rd - Zakir-Solo-Piece

powershell parent file-move
1个回答
0
投票

这在我的测试中有效。

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

© www.soinside.com 2019 - 2024. All rights reserved.