2013-09-23 46 views
0

我從複製共享上的文件,我試圖尋找一行代碼,之後取出的代碼&一些行,然後用相同的名稱再次保存該文件中刪除一些行。搜索和PS1文件

假設我有myconfig.ps1文件下面的內容

WriteHost("My operations"); 
WriteHost("My Object Creation"); 
$mytmp.NewObjectCreation($myobj1); 
$mytmp2.NewObjectCreation($myobj2); 
WriteHost("My Object Creationcompleted"); 
WriteHost("My operations completed"); 

輸出文件應該是相同的名稱作爲原始文件I,E,myconfig.ps1和內容如下

WriteHost("My operations"); 
WriteHost("My Object Creation"); 
WriteHost("My Object Creationcompleted"); 
WriteHost("My operations completed"); 

我在下面試圖對一個聲明,它不工作:

$s1 = [regex]::escape("$mytmp.NewObjectCreation($myobj1);") 
$c1 = [regex]::escape("#$mytmp.NewObjectCreation($myobj1);") 


Get-Content $originalbuildspecfile | ForEach-Object { 
    $_ - $s1, $c1 
    } | Set-Content ($originalbuildspecfile) 

回答

3

您可以使用get-content讀取文件,管的每一行,以where-object一些條件的內容,並使用set-content再次保存。 在你想給你寫信是從讀同一個文件時,你必須保存在一個變量的內容,否則你將得到一個錯誤,指出已被使用的文件。

例如:

PS> $file = "c:\temp\myconfig.ps1" 
PS> $content = get-content $file | where {-not $_.StartsWith('$') } 
PS> set-content $file -Value $content 

這個例子將檢查「myconfig.ps1」每一行,將投入不以「$」開頭的變量$content只有線。 第三線將存儲在$content的值,將放入「myconfig.ps1」。

請注意,如果你的源文件的位置是從目標文件的位置不同,你可以在一個單一的線,像這樣:

PS> get-content "c:\temp\myconfig.ps1" | where {-not $_.StartsWith('$') } | set-content "c:\other_location\myconfig.ps1" 

希望這有助於。

+0

獲取內容及設置內容爲我工作。 – usr021986