在 PowerShell 中排除特定文件夹

在 PowerShell 中排除特定文件夹

我对脚本和 PowerShell 都很陌生。我想做的是从一个文件夹部署文件(C:\Deployments\QA\QADEP-1504\Processor Handlers\Release)到远程服务器上的另一个文件夹(\HQDEVAPP004\C$\Lonestar\ProcessorHandlers\Test)。在“测试”文件夹中,有 3 个子文件夹(1、2 和 RejectedTransactionHandler)

因此,我希望所有文件都部署到文件夹 1 和 2,但不部署到 RejectedTransactionHandler 文件夹。我尝试使用“-exclude”函数,但这似乎只适用于文件,而不适用于文件夹,但我可能错了。文件每次都会部署到所有三个文件夹。以下是我目前的情况:

起始目录的位置

$_SourcePath = "C:\Deployments\QA\QADEP-1504\Processor Handlers\Release"

列出本地目录中的所有文件夹

$PH = Get-ChildItem '\\HQDEVAPP004\c$\LoneStar\ProcessorHandlers\Test\' -Directory
Clear-Host

foreach ($folder in $PH.Name) {
Get-ChildItem -recurse ($_SourcePath) | Copy-Item -Destination "\\HQDEVAPP004\C`$\Lonestar\ProcessorHandlers\Test\$folder" -PassThru 
}
```

答案1

添加if ($folder -ne 'RejectedTransactionHandler'),这样在循环遍历文件夹时,就不会复制到文件RejectedTransactionHandler夹。如果两个值不相等,则
PowerShell-ne比较运算符返回,如果相等,则返回。$true$false这里是相关文档。

答案2

为了完成这个任务[ K.O. style]你可以...

  1. 创建一个数组变量来包含要省略的文件夹名称。
  2. 创建另一个变量,其中包含源目录下子文件夹的目录名称(不包括指定的省略的子文件夹)。
  3. 然后循环源变量到...
    • 如果目标子文件夹不存在则创建它
    • 将源子文件夹内容复制到相关目标文件夹

电源外壳

#$ExcludeFolders = "RejectedTransactionHandler","FolderXYZ"
$ExcludeFolders = "RejectedTransactionHandler"
$_Source = Get-ChildItem 'C:\Folder\Source' -Directory | ? { $_.Name -notin $ExcludeFolders };
$_Destination = "C:\Folder\Destination\Test";

$_Source | % { 
    If (!(Test-Path "$_Destination\$($_.Name)")){ New-Item -Path "$_Destination\$($_.Name)" -ItemType Directory -Force; }
    Copy-Item "$($_.FullName)\*" -Destination "$_Destination\$($_.Name)" -PassThru
    }

支持资源

相关内容