2017-02-15 31 views
0

我有一個想找到的文本,如果在適當的條件得到滿足,它將取代文本的簡單腳本:PowerShell的更換是複製結果

foreach ($line in $file){ 
$line.replace("â‡","+") | Out-File -FilePath $destination -Append 
if ($line -eq "â‡RECORD_IDENTIFIER:"){ 
    $line.replace("â‡RECORD_IDENTIFIER:","+RECORD_IDENTIFIER: A") | Out-File -FilePath $destination -Append 
} 
if ($line -eq "â‡END_TAG"){ 
    $line.replace("â‡END_TAG","+END_TAG;") | Out-File -FilePath $destination -Append 
} 

但結果是這樣的:

+START_TAG: 
+DATA_FILE_(DATE/TIME):2017-02-13T13:44:44.489-08:00 
+RECORD_IDENTIFIER: 
+RECORD_IDENTIFIER: A 
+CLIENT_NUM:8802 
+SOLOMON_ID:TRUG01 

我只想讓它產生一個RECORD_IDENTIFIER。

+0

你有'$ line.replace(「‡」,「+」)''爲記錄行運行。那麼你的if也會激發記錄標識符。由於'$ line'仍然是'‡RECORD_IDENTIFIER:' – Matt

+0

好吧,我試過這樣的: 'foreach($ line in $ file){ $ line.replace(「‡‡」,「+」) | Out-File -FilePath $ destination -Append if($ line -eq「+ RECORD_IDENTIFIER:」){line_replace(「+ RECORD_IDENTIFIER:」,「+ RECORD_IDENTIFIER:A」)| Out-File -FilePath $ destination -Append } if($ line -eq「+ END_TAG」){ $ line.replace(「+ END_TAG」,「+ END_TAG;」)| Out-File -FilePath $ destination -Append } }' ....但那也行不通。 –

回答

3

這是您需要發現Switch運算符的地方。我認爲這是一個運算符,也許是一個cmdlet?不管它是什麼,它都是你需要的!它所做的是將集合的當前迭代與多個案例進行比較,並應用匹配的案例。例如:

Switch ($file) { 

    "â‡RECORD_IDENTIFIER:" { 
     $_.Replace("â‡RECORD_IDENTIFIER:", "+RECORD_IDENTIFIER: A") | 
      Out-File -FilePath $destination -Append 
     Continue 
    } 

    "â‡END_TAG" { 
     $_.Replace("â‡END_TAG", "+END_TAG;") | 
      Out-File -FilePath $destination -Append 
     Continue 
    } 

    default { 
     $_.Replace("â‡", "+") | 
      Out-File -FilePath $destination -Append 
    } 

} 

Continue命令告訴循環移動到下一個項目,因此,如果它會做第一種情況相匹配的替代,它輸出到文件,然後移動到下一行。如果它不匹配第一種情況,它會嘗試第二種情況,如果它匹配,則會替換它,輸出到文件並移動到下一行。如果它與前兩種情況中的任何一種都不匹配,則它會到達default行,並且所有內容都會應用該腳本塊,因此與前兩種情況不匹配的任何內容都會執行replace("â‡","+"),並輸出到文件。

+0

這種方法完美無缺了一個簡單的文本文件,我創建像一個文本文件:使用此代碼 blue orange yellow : 開關($ TESTFILE){ 「藍色」 {$ _替換(「藍色」, 「綠色」)| Out-File -FilePath「\\ a1-gcs-snf-001 \ DataFeeds \ TrueGreen \ test_modified.txt」-Append;繼續} 默認{$ _ | Out-File -FilePath「\\ a1-gcs-snf-001 \ DataFeeds \ TrueGreen \ test_modified.txt」-Append} } 將'blue'切換到'green'沒問題。 當我爲我的大文本文件運行它時,沒有一個替換似乎工作。 –

+0

我得到它的工作!當我複製粘貼的時候,unicode發生了一些奇怪的事情......謝謝! –