如何使用Get-ChildItem并在Powershell中排除包含数组的项目列表?
我想用一个数组用于排除:如何使用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”
有任何人的想法?
第一:
构造您$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在贝壳世界)。
仅使用"..."
如果明确要在串传递到目标指令。
$Language = @('de.txt')
If ($PackageConfigFile.Language -notlike $Null) {
foreach ($LIP in $PackageConfigFile.Language) {
$Language += "$LIP.txt"
}
}