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 }})
我是 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
运算符,它看起来是用另一个字符串查找某个子字符串对于 数组 .
因为在你的例子中你有一个字符串数组,你可以使用:
[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 }})