Powershell:将文件夹和子文件夹中的所有文件移动到单个文件夹中

时间:2016-06-27 21:18:23

标签: powershell

尝试索引并搜索8K文件和2K文件夹中的文件..

是否有一个简单的Powershell脚本可以将文件夹和/或子文件夹中的所有文件移动到一个主文件夹中?

不需要删除空文件夹但有帮助。

3 个答案:

答案 0 :(得分:25)

help -Examples Move-Item下的第四个示例接近您的需求。要将source目录下的所有文件移动到dest目录,您可以执行以下操作:

Get-ChildItem -Path source -Recurse -File | Move-Item -Destination dest

如果您想在之后清除空目录,可以使用类似的命令:

Get-ChildItem -Path source -Recurse -Directory | Remove-Item

答案 1 :(得分:0)

使用 .parent 作为父目录。它可以递归使用:.parent.parent

答案 2 :(得分:0)

我知道这篇文章有点旧,但我遇到了一个类似的问题,但这并没有涵盖我需要维护所有 fsubolder 结构的情况,所以这是我维护子文件夹结构的解决方案

$sourcePath = "C:\FolderLocation"
$destPath = "C:\NewFolderLocation"
Write-Host "Moving all files in '$($sourcePath)' to '$($destPath)'"
$fileList = @(Get-ChildItem -Path "$($sourcePath)" -File -Recurse)
$directoryList = @(Get-ChildItem -Path "$($sourcePath)" -Directory -Recurse)
ForEach($directory in $directoryList){
    $directories = New-Item ($directory.FullName).Replace("$($sourcePath)",$destPath) -ItemType Directory -ea SilentlyContinue | Out-Null
}
Write-Host "Creating Directories"
ForEach($file in $fileList){
    try {
        Move-Item -Path $file.FullName -Destination ((Split-Path $file.FullName).Replace("$($sourcePath)",$destPath)) -Force -ErrorAction Stop
    }
    catch{
        Write-Warning "Unable to move '$($file.FullName)' to '$(((Split-Path $file.FullName).Replace("$($sourcePath)",$destPath)))': $($_)"
        return
    }
}
Write-Host "Deleting folder '$($sourcePath)'"
Remove-Item -Path "$($sourcePath)" -Recurse -Force -ErrorAction Stop