使用 Copy-Item 时排除多个目录

使用 Copy-Item 时排除多个目录

客观的:复制所有子文件夹内容测试环境对其本身而言。

C:\TestEnv\Folder1\*
C:\TestEnv\Folder1\Testfile1.txt
C:\TestEnv\Folder1\Testfile2.tpdf
C:\TestEnv\Folder2\*
C:\TestEnv\Folder2\Testfile3.txt
C:\TestEnv\Folder2\Testfile4.pdf

C:\TestEnv\
C:\TestEnv\Testfile1.txt
C:\TestEnv\Testfile2.tpdf
C:\TestEnv\Testfile3.txt
C:\TestEnv\Testfile4.pdf

我目前所拥有的...

$Exclude = 'C:\TestEnv\Scripts','C:\TestEnv\TestFiles'

复制项目-排除$Exclude-路径“C:\TestEnv\*\*”-目标“C:\TestEnv”-Recurse

答案1

由于-Exclude没有获取数组,请尝试以下操作:

$Exclude = 'C:\TestEnv\Scripts','C:\TestEnv\TestFiles'
Get-ChildItem -Path "C:\TestEnv\*" -directory |
  where {$_.fullname -notin $Exclude} |
  Get-ChildItem -Recurse -File |
  Foreach {
    Copy-Item -LiteralPath $_.Fullname -Destination "C:\TestEnv\" -force
  }

这里:

  • 将排除数组定义为$Exclude
  • Get-ChildItem使用并切换来过滤源目录-Directory
  • 使用 过滤排除目录where
  • 再次仅列出带有-File和 递归的文件-Recurse
  • 然后在循环中Copy-Item强制(-Force可省略)Foreach传输文件。

相关内容