我有一个问题。我想将一个目录的内容复制到另一个目录并取得一些进展。但是,目前我被卡住了,因为如果我可以定义要排除的文件数组我有文件夹数组的问题。所以数组看起来像:
$excludeFiles = @('app.config', 'file.exe')
$excludeFolders = @('Logs', 'Reports', 'Backup', 'Output')
当$ excludeFolders数组中只有一个项目时,它有效,但如果我添加多个项目,它会复制所有文件夹而不排除它们。
我有脚本:
Get-ChildItem -Path $binSolutionFolder -Recurse -Exclude $excludeFiles |
where { $excludeFolders -eq $null -or $_.FullName.Replace($binSolutionFolder, "") -notmatch $excludeFolders } |
Copy-Item -Destination {
if ($_.PSIsContainer) {
Join-Path $deployFolderDir $_.Parent.FullName.Substring($binSolutionFolder.length -1)
}
else {
Join-Path $deployFolderDir $_.FullName.Substring($binSolutionFolder.length -1)
}
} -Force -Exclude $excludeFiles
$ binSolutionFolder是源,$ deployFolderDir是目标。 文件工作正常,但对于文件夹,我已经没有想法。
答案 0 :(得分:1)
-notmatch
使用正则表达式而不是集合。要匹配可以使用-notin $excludedfolders
的单词集合,但如果路径包含2个级别的文件夹或只是简单的\
,则测试将失败。
我会使用-notmatch
,但首先创建一个正则表达式模式,检查所有文件夹。例如:
$excludeFiles = @('app.config', 'file.exe')
$excludeFolders = @('Logs', 'Reports', 'Backup', 'Output','Desktop')
$excludeFoldersRegex = $excludeFolders -join '|'
Get-ChildItem -Path $binSolutionFolder -Recurse -Exclude $excludeFiles |
where { $_.FullName.Replace($binSolutionFolder, "") -notmatch $excludeFoldersRegex } |
.....