【问题标题】:How to use Get-ChildItem with excluding a list of items with an array in Powershell?如何在Powershell中使用Get-ChildItem排除带有数组的项目列表?
【发布时间】:2017-10-21 18:56:02
【问题描述】:

我想使用数组进行排除:

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"""
    }
}

$language 有例如以下内容

"de.txt",

"en.txt",

“es.txt”

有人有想法吗?

【问题讨论】:

    标签: arrays powershell get-childitem


    【解决方案1】:
    $Language = @('de.txt')
    If ($PackageConfigFile.Language -notlike $Null) {
        foreach ($LIP in $PackageConfigFile.Language) {
            $Language += "$LIP.txt" 
        } 
    }
    

    【讨论】:

      【解决方案2】:

      第一:

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

      创建该数组应该很简单:

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

      -replace,以集合(数组)为LHS,单独对集合中的每一项进行操作; '$', '.txt' 有效地将.txt 追加 .txt 到每个输入项的end ($),并且将生成的修改元素收集在$Language 中作为array,.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 在贝壳世界)。

      仅当您明确想要将 字符串 传递给目标命令时,才使用 "..."。

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 2013-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 2018-08-22
        相关资源
        最近更新 更多