Powershell 基于CSV文件从Get ChildItem中排除目录列表
目录结构如下: Directory: \\L04274\C$\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/12/2018 2:04 PM AutomatedImportProcess d----- 3/13/2018 11:34 AM f1 d----- 3/13/2018 11:33 AM f2 我只希望看到以下文件夹: \\L04274\C$\Temp\AutomatedImportProcess\ \\L04274\C$\Temp\AutomatedImportProcess\Powershell 基于CSV文件从Get ChildItem中排除目录列表,powershell,Powershell,目录结构如下: Directory: \\L04274\C$\Temp Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 3/
Exclude
仅对文件名有效
您必须在以下事实之后使用嵌套的Where Object
语句:
$path = '\\L04274\C$\Temp\f1'
$exclusions = @(Import-Csv -LiteralPath '\\L04274\C$\Temp\Exclusions.csv') |Select-Object -Expand ExcludeDirectory
Get-ChildItem -Path $path -Force |Where-Object {
$FullName = $_.FullName
-not($exclusions|Where-Object {
$FullName -like "$_*"
})
}
如果完整路径与任何排除项都不匹配,则
-not(…)
语句将返回$true
,否则文件将被忽略排除
仅对文件名有效
您必须在以下事实之后使用嵌套的Where Object
语句:
$path = '\\L04274\C$\Temp\f1'
$exclusions = @(Import-Csv -LiteralPath '\\L04274\C$\Temp\Exclusions.csv') |Select-Object -Expand ExcludeDirectory
Get-ChildItem -Path $path -Force |Where-Object {
$FullName = $_.FullName
-not($exclusions|Where-Object {
$FullName -like "$_*"
})
}
如果完整路径与任何排除项不匹配,则-not(…)
语句将返回$true
,否则将忽略该文件此操作:
$path = '\\L04274\C$\Temp'
$exclusion = @(Get-Content -LiteralPath '\\L04274\C$\Temp\Exclusions.csv')
(Get-ChildItem -Path $path -Force -Exclude $exclusion | ForEach-Object -Process {
$allowed = $true
foreach ($exclude in $exclusion) {
if ( $_.FullName -like $exclude) {
$allowed = $false
break
}
}
if ($allowed) {
$_
}
}).FullName
这起到了作用:
$path = '\\L04274\C$\Temp'
$exclusion = @(Get-Content -LiteralPath '\\L04274\C$\Temp\Exclusions.csv')
(Get-ChildItem -Path $path -Force -Exclude $exclusion | ForEach-Object -Process {
$allowed = $true
foreach ($exclude in $exclusion) {
if ( $_.FullName -like $exclude) {
$allowed = $false
break
}
}
if ($allowed) {
$_
}
}).FullName
看看这个问题:@JamesC。这不是我想做的。在您提到的问题中,他们使用以下内容来排除:[$archive=archive,archive,archive]我希望从csv读取到数组或某个列表中,并使用该列表排除文件夹/文件。因此,如果要排除f1文件夹,则应使用条目“\\L04274\C$\Temp\f1\”来排除。如果我只想排除文本文件,则应使用“\\L04274KAMRANF\C$\Temp\f1*.txt”。我注意到的第一件事是,您在“\\L04274\C$\Temp\f1”处执行Get ChildItem,但排除项的根是C:\Temp。请看这个问题:@JamesC。这不是我想做的。在您提到的问题中,他们使用以下内容来排除:[$archive=archive,archive,archive]我希望从csv读取到数组或某个列表中,并使用该列表排除文件夹/文件。因此,如果要排除f1文件夹,则应使用条目“\\L04274\C$\Temp\f1\”来排除。如果我只想排除文本文件,则“\\L04274KAMRANF\C$\Temp\f1*.txt”应该使用。我注意到的第一件事是,您在“\\L04274\C$\Temp\f1”上执行Get ChildItem,但您的排除项的根是C:\Temp。这引发了一个异常,但它确实让我想到了解决问题的方法:FYI异常如下:无法找到Select对象:属性“ExcludeDirectory”。在C:\Users\kamranf\Documents\PoweShellScripts\Untitled15.ps1:2 char:85+。。。RANF\C$\Temp\Exclutions.csv')选择对象-展开ExcludeDirectory+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:InvalidArgument:(ExcludeDirectory:PSObject)[选择对象],PSArgumentException+FullyQualifiederRoId:ExpandPropertyNotFound,Microsoft.PowerShell.Commands。SelectObjectCommand@KamranFarzami我的错误应该是
导入Csv
而不是获取内容
谢谢。这引发了一个异常,但它确实给了我一个想法,让我解决了这个问题:仅供参考,异常如下:选择对象:找不到属性“ExcludeDirectory”。在C:\Users\kamranf\Documents\PoweShellScripts\Untitled15.ps1:2 char:85+。。。RANF\C$\Temp\Exclutions.csv')选择对象-展开ExcludeDirectory+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:InvalidArgument:(ExcludeDirectory:PSObject)[选择对象],PSArgumentException+FullyQualifiederRoId:ExpandPropertyNotFound,Microsoft.PowerShell.Commands。SelectObjectCommand@KamranFarzami我的错误应该是导入Csv
而不是获取内容
注意“\\L04274\C$\Temp\f2\file.txt”-比如“\\L04274\C$\Temp\f2\”
是错误的。您需要将其设置为“\\L04274\C$\Temp\f2\file.txt”“\\L04274\C$\Temp\f2\*”
才能为真。但是,不确定您想要的是什么。请注意,“\\L04274\C$\Temp\f2\file.txt”-如“\\L04274\C$\Temp\f2\”
是错误的。您需要将其设置为“\\L04274\C$\Temp\f2\file.txt”“\\L04274\C$\Temp\f2\*”
才能为真。不过,我不知道你在追求什么。