2013-09-23 41 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