2017-11-16 7 views
1

これは簡単な答えのようですが、私の人生にとっては理解できません。私がやろうとしているのは、テキストファイルからたくさんのメールアドレスを取り出し、@を過ぎたメールの一部を取り除くことです(例えば、メールアドレスが[email protected]の場合、私はadamビットに興味があります)。Powershellはループの出力を配列に移動します

以下のスクリプトは、私が望む値を出力しますが、出力をコンソールではなくアレイに書きたいと思っています。これを行う最善の方法は何でしょうか?

下記のコード。

# Import the text file into a variable 
$import = Get-Content c:\\temp\test.txt 
# Variable to hold total number of emails 
$totalEmails = $import.Count 
#Variable to run loop 
$start = 0 
#Used as a separator to look at the first part of the email address 
$separator = "@" 
# Will increment by two to show the first part of the array in parts which  holds the text before the @ 
$even = 0 
# Username after @ 
$userName 


#Strip out the text before the @ 
do { 

    $parts = $import.split($separator) 
    $even+=2 

    # This line here is whats not working, I would like to have the output of  each echo written into the array $userName 
    $userName = echo $parts[$even] 


    $start++ 

} while ($totalEmails -gt $start) 
+0

これはあなたのスクリプト全体を置き換えます: '$ array = Get-Content" C:/temp/test.txt "| %{$ _ |分割文字列 - セパレータ "@" | Select First-1} '[about_Pipelines]をご覧ください(https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipelines?view=powershell-5.1) – Clijsters

+0

こんにちは、 お返事をありがとうございます!私はこれを実行しようとしましたが、Split-String文にエラーがありますか? –

+0

本当ですか?エラーは何ですか? – Clijsters

答えて

2

あなたの電子メールの構文解析はあまり意味がありません。あなたの質問のための1つのライナーがあります:

$Arr = @(Get-Content -Path 'C:\temp\test.txt') -replace '@.+' 
+0

これは、トリックを行った、ありがとうございます!ちょうど私が正確に何をしたのか理解できます。 "-replace" @ "'のステートメントは、@の後のテキストの残りを切り捨てているだけです。 –

+0

はい、それは@文字とその後のすべての文字を空の文字列 ' – EBGreen

+0

に置き換えています。正規表現はシンプルなので実際には適用されませんが、お気に入りの引用符を使用する機会はほとんどありません*********************************************************************** - Jamie Zawinski *** – EBGreen

関連する問題