这个批处理命令在 PowerShell 中会是什么样子?

What would this batch-command look like in PowerShell?

这在命令行中运行良好。已经在 PowerShell 中试过 运行 没有成功,语法明显不同。

for %%f in (*.hej) do (
    findstr /V "Channel Record TESTBOOL OK OPC Item _COMMCHECK_ SYSTEM ADMINISTRATOR Unknown ItemID Field's Connection hutdown acknowledged Alarming Suspended primary SAC reloaded Fix32" %%f > %%f.txt
    del %%f
    ren %%f.txt %%f
)

我循环遍历所有以 hej 结尾的文件,并删除包含 findstr /V 之后任何单词的任何行。

编辑: 代码有效,除了编码,现在看起来像这样:

$encoding = [System.Text.Encoding]::GetEncoding(1252)
$filter  = 'M:\ALM\*.alm'
$pattern = "Channel|Record|TESTBOOL|OK|OPC|Item|_COMMCHECK_|SYSTEM|ADMINISTRATOR|Unknown|ItemID|Field's|Connection|hutdown|acknowledged|Alarming|Suspended|primary|SAC|reloaded|Fix32"

(Select-String -encoding $encoding -Path $filter -Pattern $pattern -NotMatch) |
    ForEach-Object -Begin {Remove-Item $filter} -Process {$_.line | Out-File -Append -encoding $encoding $_.filename }

编码有问题,但从 Powershell 5 切换到 Powershell Core,它可以输入 $encoding = [System.Text.Encoding]::GetEncoding(1252)

最新补充是我没有网络文件夹的写入权限,因此我希望 "cleaned" 文件存储在本地文件夹中。已尝试通过使用

去除其路径的 $_.filename 但未成功
| Out-File -Append -encoding $encoding c:\temp\(Get-Item '$_.filename').Basename }

干杯

原始数据样本:

2018-05-19  00:22:07,166 [LUNSC1  ] Fix32.LUNSC1.LUNOP9_COMMCHECK_DV2.F_CV set to 0 by LUNOP9::SYSTEM ADMINISTRATOR                 
2018-05-19  00:23:35,226 [LUNSC2  ] Fix32.LUNSC2.LUNOP10_COMMCHECK_DV2.F_CV set to 0 by LUNOP10::SYSTEM ADMINISTRATOR               
2018-05-19  00:24:07,169 [LUNSC1  ] Fix32.LUNSC1.LUNOP9_COMMCHECK_DV2.F_CV set to 0 by LUNOP9::SYSTEM ADMINISTRATOR                 
2018-05-19  00:25:02,046 [LUNSC1  ] Fix32.LUNSC1.LUNOP9_COMMCHECK_DV.F_CV set to 0 by LUNSC1                                        
2018-05-19  00:25:07,975 [LUNSC1  ] Fix32.LUNSC1.LUNOP9_COMMCHECK_DV2.F_CV set to 1 by LUNOP9::SYSTEM ADMINISTRATOR                 
2018-05-19  00:25:35,232 [LUNSC2  ] Fix32.LUNSC2.LUNOP10_COMMCHECK_DV2.F_CV set to 0 by LUNOP10::SYSTEM ADMINISTRATOR               
2018-05-19  00:26:00,551 [LUNSC1  ] D_TA204_GT1_DV_AL             CFN              LARM      D_TA204_GT1_Reglerfel                  
2018-05-19  00:27:07,165 [LUNSC1  ] Fix32.LUNSC1.LUNOP9_COMMCHECK_DV2.F_CV set to 1 by LUNOP9::SYSTEM ADMINISTRATOR                 
2018-05-19  00:27:35,235 [LUNSC2  ] Fix32.LUNSC2.LUNOP10_COMMCHECK_DV2.F_CV set to 0 by LUNOP10::SYSTEM ADMINISTRATOR               
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT41_DV_AL            CFN              LARM      D_TA204_GT41_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT31_DV_AL            CFN              LARM      D_TA204_GT31_Reglerfel                 
2018-05-19  00:28:01,049 [LUNSC1  ] D_TA204_GT21_DV_AL            CFN              LARM      D_TA204_GT21_Reglerfel   

在 PowerShell 中,类似这样的操作将执行您描述的操作:

$filter  = '*.hej'
$pattern = "Channel|Record|TESTBOOL|OK|OPC|Item|_COMMCHECK_|SYSTEM|ADMINISTRATOR|Unknown|ItemID|Field's|Connection|hutdown|acknowledged|Alarming|Suspended|primary|SAC|reloaded|Fix32"

(Select-String -Path $filter -Pattern $pattern -NotMatch) |
    ForEach-Object -Begin {Remove-Item $filter} -Process {$_.line >> $_.filename}