仅复制项目/删除项目子内容而无需根文件夹?

问题描述 投票:0回答:3

嗨,我正在努力解决以下问题 - 假设我有以下目录结构 C:\Temp\Test1 和 C:\Temp\Test2

我想做的是将 C:\Temp\Test1 的子内容递归复制到 C:\Temp\Test2 而不复制实际文件夹 C:\Temp\Test1 ..如果我现在使用命令

Copy-Item C:\Temp\Test1 C:\Temp\Test2 -Recurse

将导致 C:\Temp\Test2\Test1 并且参数组合似乎无法缓解该问题

同样,当我希望删除 C:\Temp\Test2 中的所有子内容时,我希望仅删除子内容而不是实际文件夹,例如

Remove-Item C:\Temp\Test2\ -Recurse

正在删除 \Test2 文件夹。我尝试了很多参数变化 - 我怎样才能完成我想要做的事情?

powershell powershell-2.0 powershell-ise
3个回答
8
投票

看一下 get-childitem 命令。您可以在管道中使用它来复制或删除根文件夹下的所有项目:

# recursively copy everything under C:\Temp\Test1 to C:\Temp\Test2
get-childitem "C:\Temp\Test1" | % { 
    copy-item $_.FullName -destination "C:\Temp\Test2\$_" -recurse 
}

# recursively remove everything under C:\Temp\Test1
get-childitem "C:\Temp\Test1" -recurse | % { 
    remove-item $_.FullName -recurse 
}

5
投票
    Copy-Item C:\Temp\Test1\* C:\Temp\Test2
    Remove-Item "C:\Temp\Test2\*" -recurse

也有效:)


0
投票

正如 @edelwater 的评论中提到的,在 SuperUser 上有一个简单而正确的答案,我将在这里重现:

Copy-Item -Path "C:\FolderA\*" -Destination "C:\FolderB\" -recurse -Force -Verbose

关键是在源路径末尾添加

*

假设

FolderA
FolderB
都是当前目录中的文件夹,并且
FolderA
包含以下内容:

|-- File1.txt
|-- Subdirectory1
|   |-- File2.txt
|   |-- File3.txt
|-- Subdirectory2
    |-- File4.txt

然后是以下内容:

$MySource = "FolderA"
$MyDest = "FolderB"

Copy-Item `
  -Path (Join-Path $MySource "*") `
  -Destination $MyDest `
  -Recurse `
  -Force

FolderB

内创建此结构
|-- File1.txt
|-- Subdirectory1
|   |-- File2.txt
|   |-- File3.txt
|-- Subdirectory2
    |-- File4.txt

如果源文件夹路径中没有

*
,您最终会得到:

|-- FolderA
    |-- File1.txt
    |-- Subdirectory1
    |   |-- File2.txt
    |   |-- File3.txt
    |-- Subdirectory2
        |-- File4.txt
© www.soinside.com 2019 - 2024. All rights reserved.