【问题标题】:Powershell Compare string to foldersPowershell 将字符串与文件夹进行比较
【发布时间】:2022-01-21 09:06:58
【问题描述】:

我是 Powershell 的新手,我想知道文件夹列表中是否包含语言代码。我正在使用这个小脚本。

set-executionpolicy remotesigned -Scope CurrentUser
$path = "C:\Projects\Eg_Proyect\2022_834"
$lang = "DE-DE"
$Lsta2 = Get-ChildItem -Path $path -Name
$Lsta2 
$Lsta2.Count
$Lsta2 -contains $lang

结果是:

0_SOURCE
10_EN-GB_PL
11_EN-GB_CS
12_EN-GB_DE-DE
13_EN-GB_TR
1_EN-GB_ES-ES
2__
3_EN-GB_IT-IT
4_EN-GB_IT-IT
5_EN-GB_HU
6_EN-GB_HU
7_EN-GB_NL-NL
8_EN-GB_NL-NL
9_EN-GB_PT-PT
14
**False**

为什么它不返回 True?

【问题讨论】:

  • 那是因为-contains 在数组中寻找完全匹配(不区分大小写)。
  • 所以我应该解析输出列表中的每一项?或者存在直接的方法来做到这一点?谢谢。

标签: powershell contains


【解决方案1】:

string 方法 .Contains() 总是让人感到困惑,它寻找带有另一个字符串的某个子字符串,而 PowerShell -contains 运算符寻找完整、精确(不区分大小写) ) 数组中的项目。

因为在你的情况下你有一个字符串数组,你可以使用:

[bool]($Lsta2 -match 'DE-DE')    # uses RegEx. returns True or False because of the cast to `[bool]`

或

[bool]($Lsta2 -like '*DE-DE*')  # uses WildCards ('*' and/or '?')

或对每个字符串单独使用.Contains() 字符串运算符。这当然是浪费时间,而且它可以区分大小写,但要表明它可以做到:

[bool]($Lsta2 | ForEach-Object { if ($_.Contains('DE-DE')) { $true }})

【讨论】:

    【解决方案2】:

    您可以使用-match 在字符串中使用正则表达式进行搜索

    $Lsta2 -match $lang
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2014-11-08
      相关资源
      最近更新 更多