【问题标题】:Powershell , array1 , Array2 , find String, replace StringPowershell , array1 , Array2 , 查找字符串, 替换字符串
【发布时间】:2021-12-19 17:44:33
【问题描述】:

好吧,我只想知道如果读出的内容(包括 Verkaufsabteilungsleiter 或 Gesamtleitung 中的“leiter”之类的词,并保存在变量中,例如 MitgliedÄndern2、$Mitgliedlesen2、$MitgliedÄndern3、$Mitgliedlesen3 过滤掉了这个东西不会生成。

或者它会找到像 Verkaufsabteilung-Inland 这样的东西,然后在 String 中添加一些东西。 所以我认为比较两个数组会更短如果我逐行编写。

if ($Abt -match "leiter") {$Standortsleitunglesen2 = $Mtl2 + "s" + "leitung" + "-" + "Lesen"}


if ($Abt -match "leiter") {$Standortsleitunglesen2 = $Mtl2 + "s" + "leitung" + "-" + "Lesen"}

if ($Standortsleitunglesen2 -match "Geschäft" ) {$Standortsleitunglesen2 = "" }

所以我可以在 array2 中设置术语,我不需要写很多行并手动输入。我希望你现在明白了。

所以我认为我的解决方案朝着以下方向发展:

$array = @($MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 , $Mitgliedlesen3)
$array2 = "leiter" , "leitung"

for([int] $i = 0; $i -le ($array.Count -1); $i++)
{
    foreach($word in $array2)
    {
        if($array[$i] -like "*$word*")
        {
         if ($array[$i] -match $MitgliedÄndern2) { ($MitgliedÄndern2 = "") }
         if ($array[$i] -match $Mitgliedlesen2) { ($Mitgliedlesen2 = "") }  
         if ($array[$i] -match $MitgliedÄndern3) { ($MitgliedÄndern3 = "") }
         if ($array[$i] -match $Mitgliedlesen3) { $Mitgliedlesen3 = ""}
         $array[$i] = ""            
           
        }
    }
}

我有一个问题,变量会生成 CSV 表的用户名。 CSV:吸入

Nummer;Ordner1;Ordner2;Ordner3;Benutzername;;;Beschreibung;Mitglied;Mitglied 2;Gruppenbeschreibung;Gruppenbeschreibung 2

1;Hamburg;Geschäftsleitung;HH-GL;Stefan Berti;;;Standortleiter;GG-H-Geschäftsleiter;;Geschäftsleitung Hamburg;

在array2中我想循环必须在array1中搜索的单词。

如果他在 $MitgliedÄndern2、$Mitgliedlesen2、$MitgliedÄndern3 中找到 array2 的字符串,例如 'leiter' 或其他单词,如“Sekretär”,它将是 Write "" in $MitgliedÄndern2, $Mitgliedlesen2, $MitgliedÄndern3 .

我有一个适用于简单数组的方法,但该方法在该示例中不起作用。

我是 Powershell 的新手,但我发现了很多东西。我不知道。

$File=Import-Csv '.\Datenbank\Hamburg.csv' -Delimiter ";" -Encoding UTF8 | foreach-object {


$Mtl1 = ""
$Mtl2 = ""
$Mtl3 = ""
$Org1 = ""
$Org2 = ""
$Org3 = ""
$Nummer = $_.Nummer
$User = ""
$Ordner1 = $_.Ordner1
$Ordner2 = $_.Ordner2
$Ordner3 = $_.Ordner3
$Beschreibung = $_.Gruppenbeschreibung 
$Beschreibung2 = $_.Gruppenbeschreibung2 

if ($Ordner1 -ne '') {$Org1 = echo HH}
if ($Ordner2 -ne '') {$Org2 = $($_.'Ordner2')}
if ($Ordner3 -ne '') {$Org3 = $($_.'Ordner3')}

$Mtl1 = "$Org1"
$Mtl2 = "$Org1" + "-" + "$Org2"
$Mtl3 = "$Org1" + "-" + "$Org2" + "-" + "$Org3" 


#Lesen
$Mitgliedlesen3 = ""
$Mitgliedlesen2 = ""
$MitgliedÄndern3 = ""
$MitgliedÄndern2 = ""
$Bes = $_.Beschreibung

if ($Org3 -ne '') {$Mitgliedlesen3 = $Mtl3 + "-"+ "Lesen"}
if ($Org2 -ne '') {$Mitgliedlesen2 = $Mtl2 + "-" + "Lesen"}

$MitgliedÄndern2 = "Abteilungsleiter" 
$Mitgliedlesen2  = "Bundesleiter"
$MitgliedÄndern3 = "Mitarbeiter"
$Mitgliedlesen3 = "Mitarbeiterleiter"

$array = $MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 
$array2 = "leiter" , "" 

已经测试了跟随的东西。

#$array3 = (Compare-Object $array2 $array).InputObject
 
#$Array4 = $Array | where {$_ -match "leiter"}
 
$result = $array | Where {$array -notContains "leiter"}
 
 
 #$result = $array1 | ?{$_.Split('=')[0] -in ($array2 | %{$_.Split('=')[0]})}
 
 
#$result = compare $Array $Array2 -Property Key -IncludeEqual -ExcludeDifferent -, 
Passthru $result
 
 
#$Array -like "*$array2*"
 
#$Array4
 
 
#$array3[0..1]
 
 
#ForEach ($array in $array2){
#$array  -replace "^[$i0 .. $i]$array2","" 

#}

.. }

感谢您的帮助。

【问题讨论】:

  • 如果您可以包含您拥有的 csv 数据的示例以及您想要的数据,那将会很有帮助。我还不清楚你想要什么,你的哪些注释掉的代码是相关的。
  • 好的,然后我编辑我的问题;)并添加那个东西。 $MitgliedÄndern 是 csv File 不同部分组合的结果。它是由生成的
  • @marsze 已对其进行编辑并添加更多信息
  • 关于stackflow的一个问题。如果我为自己的问题写了答案,为什么 Stackflow 会通知我?那会发生什么?我不能在重新回答新答案后吗?那么事情是跟随我有数据库,我必须创建用户。所以我有不同的公司部门,如销售和仓储、管理等,我需要不同的组,例如销售-写作、销售-阅读活动目录中的文件夹。我必须创建文件夹,我必须创建组,在组和文件夹中设置属性并将用户添加到组。
  • for([int] $i = 0; $i -le ($array.Count -1); $i++) { foreach($array2 中的$word) { if($array[$ i] -like "$word") { if ($array[$i] -match $MitgliedÄndern2) { ($MitgliedÄndern2 = "") } if ($array[$i] -match $ Mitgliedlesen2) { ($Mitgliedlesen2 = "") } if ($array[$i] -match $MitgliedÄndern3) { ($MitgliedÄndern3 = "") } if ($array[$i] -match $Mitgliedlesen3) { $Mitgliedlesen3 = ""} $array[$i] = "" } } } 就像如果它在 array2 中检测到一个单词,它应该在变量中更改它。

标签: arrays powershell variables replace compare


【解决方案1】:

我对变量中的字符有一些问题,所以我重命名了它们。

$MitgliedAndern2  = "Abteilungsleiter" 
$Mitgliedlesen2  = "Bunde"
$MitgliedAndern3  = "Mitarbeiter"
$Mitgliedlesen3 = "Mitarbeiterleiter"

$array1 = @($MitgliedAndern2 , $Mitgliedlesen2 , $MitgliedAndern3 , $Mitgliedlesen3)
$array2 = "leiter" , "Sekretär" 

"array1 before before script runs: $array1`r"


for([int] $i = 0; $i -le ($array1.Count -1); $i++)
{
    foreach($word in $array2)
    {
        if($array1[$i] -like "*$word*")
        {
           $array1[$i] = ""
        }
    }
}
    
"`rarray1 after script run: $array1`r"

【讨论】:

  • 感谢您的回答 :) 我会尝试您所做的。所以我发现我在解决问题方面有一个错误。我会尝试并提供反馈。你指的是哪个字符?
  • 变量名在我的 powershell 中引起了问题:$MitgliedÄndern2
  • @Mogash,PowerShell 很乐意在变量名中接受非 ASCII 范围字符,例如 Ä。如果它们不起作用,则意味着您的脚本文件保存为 UTF-8 没有 BOM。用 BOM 重新保存它,它应该可以工作了。
  • 是的@mklement0 说的。但 !! Powershell ISE 有问题。 Powershell 本身没有问题。那是 Visual Basic 编辑器吗?
  • @Joe, Windows PowerShell - 无论是在(过时的)ISE 还是在常规控制台窗口中运行 - 都需要 BOM 才能识别 UTF8,因此 BOM 存在于给定文件,该文件也应在 ISE 中正确读取。请注意,PowerShell (Core) 7+ 现在默认 为 UTF-8,因此不再需要 BOM。但是,如果您需要脚本在 两个 PowerShell 版本中运行,请务必使用 UTF-8 与 BOM
【解决方案2】:

解决方案是这是我的基础解决方案:

$MitgliedÄndern2 = "Abteilungsleiter" 
    $Mitgliedlesen2  = "Bundespräsident"
    $MitgliedÄndern3 = "Mitarbeiter"
    $Mitgliedlesen3 = "Mitarbeiterleiter"
    
    $array = @($MitgliedÄndern2, $Mitgliedlesen2 , $MitgliedÄndern3 , $Mitgliedlesen3)
    $array2 = "leiter" , "präsident"
    
    
    "array1 before before script runs: $array`r"
    
    
    for([int] $i = 0; $i -le ($array.Count -1); $i++)
    {
        foreach($word in $array2)
        {
            if($array[$i] -like "*$word*")
            {
             if ($array[$i] -match $MitgliedÄndern2) { if ($MitgliedÄndern2 -like "*$word*")  {$MitgliedÄndern2 = ""}}
             if ($array[$i] -match $Mitgliedlesen2) { if ($Mitgliedlesen2 -like "*$word*")  {$Mitgliedlesen2 = ""} }  
             if ($array[$i] -match $MitgliedÄndern3) { if ($MitgliedÄndern3 -like "*$word*")  {$MitgliedÄndern3 = ""} }
             if ($array[$i] -match $Mitgliedlesen3) { if ($Mitgliedlesen3 -like "*$word*")  {$Mitgliedlesen3 = ""} }
             $array[$i] = ""            
               
            }
        }
    }
    
    #$array[$i] = ""
     
        
    "`rarray1 after script run: $array`r"
    
    $MitgliedÄndern2
    $Mitgliedlesen2  
    $MitgliedÄndern3 
    $Mitgliedlesen3 

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
  • @Bot 得看你的意思
猜你喜欢
  • 2014-12-03
  • 2017-06-15
  • 2022-11-14
  • 1970-01-01
  • 2013-12-08
  • 2011-08-22
  • 1970-01-01
  • 2021-12-11
相关资源
最近更新 更多