我试图从一批文件中删除以下字符串:“已将数据库上下文更改为‘SystemLog’。” 通过使用下面的脚本。这适用于包含除特定字符串之外的其他信息的文件,但不适用于仅包含该特定字符串的文件(该字符串将仅保留在文件中)。在这种情况下,为什么它不删除字符串而只返回一个空文件?
包含字符串和附加信息的输入文件(类型 = RPT 文件):
将数据库上下文更改为“SystemLog”。
System_Identifier_DevLog 2023-12-13 时间 操作 549 个操作已完成
仅包含特定字符串的输入文件(类型 = RPT 文件)(它在字符串下方包含一个新行):
将数据库上下文更改为“SystemLog”。
我使用的代码:
$files=Get-ChildItem -Path "C:\SQL_SHM\Test2\" -Recurse -File | ForEach-Object {$file = $_.FullName (Get-Content $file ) | Where-Object {$_ -notmatch "Changed database context to 'SystemLog'."} | Set-Content $file } #remove unnecessary text
当过滤掉特定行的结果为空时,通过管道将其传递到
Set-Content
将是无操作,这意味着没有任何内容写入文件。为了在这种情况下也将 $null 写入文件,请不要使用管道,而是使用-Value
Set-Content 参数指定新内容:或者,通过使用更快的
switch
: