Powershell 将字符串与文件夹进行比较

Powershell Compare string to folders

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

set-executionpolicy remotesigned -Scope CurrentUser
$path = "C:\Projects\Eg_Proyect22_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**

为什么它不 return 正确?

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

$Lsta2 -match $lang

总是混淆 string 方法 .Contains() 和 PowerShell -contains 运算符,它看起来是用另一个字符串查找某个子字符串对于 数组 .

中的完整、准确的 (case-insensitive) 项目

因为在你的例子中你有一个字符串数组,你可以使用:

[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 '?')

OR 对每个字符串单独使用 .Contains() 字符串运算符。这当然是浪费时间,并且它有效 Case-Sensitively,但要证明它可以完成:

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