首页 > 解决方案 > 用于删除脚本中的块注释的 Powershell 脚本

问题描述

我在删除看起来像这样的评论块时遇到了一些麻烦:

//JR-0001-//
//iErr :=  0;
// IF NOT TSUtil.ReadStatementTransactions(TRUE,iErr) THEN BEGIN
//  IF (iErr <> 0) THEN BEGIN
//    IF NOT PosConfirm(Text223,FALSE) THEN
//      EXIT;
//  END;
//END;
//JR-0001+//

JR-0001-:这是注释块的开始

JR-0001+:这是注释块的结尾

我能够删除单行注释(以“//JR-”开头,但我坚持删除一块注释。

任何帮助表示赞赏。

标签: powershell

解决方案


一种方法是循环。

对于输入文件的每一行:

  1. 如果该行看起来像“开始评论”行,则设置“是评论”标志
  2. 如果当前未设置标志,则输出该行
  3. 如果该行看起来像“结束注释”,则取消设置标志

ForEach-Object是一个循环,可以如下表达

$isComment = $false                                             # prepare flag variable

$inputLines | ForEach-Object {
    if ($_ -match '^//JR-\d*-//')  { $isComment = $true  }      # enable flag
    if (-not $isComment) { $_ }                                 # output if flag is not set
    if ($_ -match '^//JR-\d*\+//') { $isComment = $false }      # disable flag
}

正则表达式是

^ # 字符串开头
// # 两个斜线
JR-#“JR-”
\d* # 位数(0-n 次重复)
- # 减号(第二个表达式中的加号)
// # 两个斜线

推荐阅读