2017-10-21 120 views
1

我想用一个数组用于排除:如何使用Get-ChildItem并在Powershell中排除包含数组的项目列表?

Remove-Item -Path "$InstallDir\Lang\*" -Exclude "de.txt", "en.txt" 

Get-ChildItem "$InstallDir\Lang" -EXCLUDE "es.txt", "de.txt"| Remove-Item 

这些都工作得不错。

Get-ChildItem "$InstallDir\Lang\*" -Exclude "$Language" | remove-item 

不起作用。

我尝试了几种方法(例如How to use Get-ChildItem with filter array in Powershell?How to exclude list of items from Get-ChildItem result in powershell?),但我找不到解决方案。 看起来好像$Language不能被命令解释。

这是怎么$language建:

[string]$Language = @('"de.txt"') 
If ($PackageConfigFile.Language -notlike $Null) { 
    foreach ($LIP in $PackageConfigFile.Language) { 
     $Language += ",`n ""$LIP.txt""" 
    } 
} 

$语言具有如以下内容

“de.txt”,

“en.txt”,

“es.txt”

有任何人的想法?

回答

0

第一:

构造您$Language参数作为实际PowerShell的阵列;您尝试创建一个多行字符串

创建该数组应该是简单:

$Language = $PackageConfigFile.Language -replace '$', '.txt' 

-replace,与集合(阵列)作为LHS,上单独集合中的每个项进行操作; '$', '.txt'有效追加.txt到每个输入项的$),将得到的改性元素被收集在$Language作为阵列,.NET类型System.Object[]的。

二:

不要附上$Language,你的阵列的说法,"..."

Get-ChildItem $InstallDir\Lang\* -Exclude $Language | Remove-Item -WhatIf 

如果在"..."括一个数组变量,PowerShell的将其转换为单一,优选可变$OFS的值,级联阵列元件构成的,其默认为空间;例如:

PS> $arr = 'a', 'b', 'c'; "[$arr]" 
[a b c] 

对于读者从UNIX/bash背景未来:

PowerShell中的变量不需要加双引号时,他们传递给其他命令,不管他们可能包含(空格或其他shell元字符)。

当调用PowerShell本机功能(cmdlet,函数,脚本)时,该变量的原始类型保持原样(使用.NET Framework丰富类型系统的能力是核心功能,它体现了PowerShell在贝壳世界)。

仅使用"..."如果明确要在传递到目标指令。

1
$Language = @('de.txt') 
If ($PackageConfigFile.Language -notlike $Null) { 
    foreach ($LIP in $PackageConfigFile.Language) { 
     $Language += "$LIP.txt" 
    } 
} 
相关问题