0

我正在从共享中复制一个文件,我正在尝试搜索一行代码,然后删除一些代码行,然后以相同的名称再次保存该文件。

假设我在 myconfig.ps1 文件中有以下内容

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

输出文件应与原始文件同名,即 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 )
4

1 回答 1

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

$content此示例将检查“myconfig.ps1”中的每一行,并将仅将不以“$”开头的行放入变量中。第三行将获取存储的值$content并将其放入“myconfig.ps1”中。

请注意,如果您的源文件位置与目标文件位置不同,您可以在一行中执行此操作,如下所示:

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

希望这可以帮助。

于 2013-09-23T12:13:51.717 回答