我正在使用 Powershell 脚本来比较目录,如果可能的话,我想清理一些代码。整个脚本的工作方式与我想要的完全一样,但我觉得我在下面包含的代码(这只是其中的一小部分)可以写得更好。
对于下面的代码,它侧重于从 csv 文件中获取排除项并将它们合并到 Get-ChildItem 中。我发现您不能以与文件相同的方式从 csv 中提取排除的路径(因为路径处理 FullName 与 Name,加上文件夹和服务器的通配符)。
所以我下面的内容对我有用。但是有没有办法让 Where-Object 部分处理将路径排除在函数中,因为我必须调用它两次?我试过把它变成一个函数并在最后加上它,但这不起作用。我也试过把它作为一个函数放在开头,但这也没有用。而且我知道当您处理函数和管道数据时,您必须以特定方式对其进行设置。所以也许我只是做错了什么。无论如何,如果您对如何清理它或使其更有效率有任何建议,我很乐意看到您拥有什么。
$ExcludedPaths = @(Import-Csv -LiteralPath 'D:\ExclusionList.csv') |Select-Object -Expand ExcludedPaths
$ExcludedFiles = @(Import-Csv -LiteralPath 'D:\ExclusionList.csv') |Select-Object -Expand ExcludedFiles
$SourceFiles = Get-ChildItem -Recurse -Path $SourceDir -Exclude $ExcludedFiles -Force | Where-Object {
$FullName = $_.FullName
-not($ExcludedPaths|Where-Object {
$FullName -like "$_*"
})
}
$DestFiles = Get-ChildItem -Recurse -Path $DestDir -Exclude $ExcludedFiles -Force | Where-Object {
$FullName = $_.FullName
-not($ExcludedPaths|Where-Object {
$FullName -like "$_*"
})
}