最终,我试图3阵列一样的项目,并把这些一样的项目在一起,他们的颜色。但现在我只是想检查数组$line中的一行是否与另一个数组$colors中的任何内容都不匹配,
$itemsofCars =@()
$cars = @()
$colors = Get-Content "C:\Newfolder\colors.txt"
$typefile = Get-Content "C:\Newfolder\cars_not_formatted.txt"
$carBlock = @("1")
foreach ($line in $typefile)
{
if($line.Contains("_Wheel") -or
$line.Contains("Doors") -or
$line.Contains("trunk") -or
$line.Contains("hood") -or
$line.Contains("coDriver") -or
$line.Contains("_driver")
)
{
$itemsofCars += $line
}
else
{
$cars += $line
}
}
#$itemsofCars
#$cars
#foreach ($car in $cars)
# {
# Add-Content 'C:\Newfolder\test.txt' $itemsofCars
# }
foreach ($line in $cars)
{
#trying to check if the line in car contains a color, if not then add to carBlock
if($line.ToUpper() -notcontains $colors.ToUpper())
{
#making sure there isn't duplicates
if($carBlock.ToUpper() -notcontains $car.ToUpper())
{
$carBlock = $line
$carBlock
}
}
else
{
}
}
这是一部分汽车文件
BRDM
BRDM_Wheel
BRDM_Doors_Driver
BRDM_Doors_coDriver
BRDM_Doors_hood
BRDM_Doors_trunk
BRDM_Doors_Driver_Woodland
BRDM_Doors_coDriver_Woodland
BRDM_Doors_hood_Woodland
BRDM_Doors_trunk_Woodland
BRDM_Doors_Driver_black
BRDM_Doors_coDriver_black
BRDM_Doors_hood_black
BRDM_Doors_trunk_black
BRDM_Doors_Driver_Pixel
BRDM_Doors_coDriver_Pixel
BRDM_Doors_hood_Pixel
BRDM_Doors_trunk_Pixel
BRDM_Doors_Driver_Camouflage
BRDM_Doors_coDriver_Camouflage
BRDM_Doors_hood_Camouflage
BRDM_Doors_trunk_Camouflage
BRDM_Doors_Driver_Flecktarn
BRDM_Doors_coDriver_Flecktarn
BRDM_Doors_hood_Flecktarn
BRDM_Doors_trunk_Flecktarn
BRDM_Woodland
BRDM_black
BRDM_Pixel
BRDM_Camouflage
BRDM_Flecktarn
这是颜色文件
Woodland
Black
Pixel
Camouflage
Flecktarn
ZSU
Grey
Desert
Chrome
Winter
Scull
Blue
Orange
Red
Green
lightgreen
kamo
union
white
Gold
Samurai
grey
blue
kamo2
BIOHAZARD
CAMOgreen
carbon
Flora
GVILORD
skul
beige
chaki2
MCHS
les
umbr
我已经重新安排了无数次代码,但还是不能让它工作。我能做些什么来实现它?
3条答案
按热度按时间fslejnso1#
你的代码对于你想要实现的目标来说似乎过于复杂,你可以从你的
colors.txt
文件和if
条件中的所有部分创建正则表达式模式,然后你可以使用带有-Regex
和-File
标志的switch
来逐行读取和匹配这些模式,然后将它们存储在自己的集合中。最后,枚举每个集合并输出到文件。
如果你需要保留内存,你也可以使用3个可步进的管道而不是3个列表:
gfttwv5a2#
两个数组的输出;颜色和部件-匹配的行和不匹配的行。
使用
foreach
嵌套循环来控制并使用-match
比较运算符列出每个数组中的匹配行。另外还有两个
Compare-Object
命令,用于列出每个数组中与另一个数组中的任何行都不匹配的值(即不匹配项)。PowerShell(匹配)
输出
PowerShell(无匹配项)
输出
支持资源
gwbalxhn3#
对于此问题,您可以考虑使用
ScriptProperty
成员,这些成员会在后期将属性值绑定到对象,这意味着您可以在创建$Cars
列表之后向$Colors
和$Parts
列表添加项如果您不想执行“(PSCustom)Object Oriented Programming",您甚至可以考虑将
ScriptProperty
成员直接添加到字符串中,这些字符串本身实际上是(PowerShell)对象。例如,参见$Cars[0].PSTypeNames
。添加的(string)成员将不会显示在字符串输出中,并且在处理时很容易消失:
由于两个
ScriptProperty
成员实际上是相同的,并且直接(不带参数)从父作用域中提取$Color
和$Parts
列表是一种不好的做法,因此您也可以考虑使用ScriptMethod
并传递相关的项列表。请注意,不幸的是,这个
$Cars |Where-Object ContainsItem($Colors) -eq 'Pixel'
不能按预期工作,请参阅:#8224
"Where-Object -Property ..." should not accept method names because they're not properties