如何使用Powershell实现.properties文件配置行批量注释与指定取消注释
PowerShell 实现properties配置文件指定项取消注释脚本
完整可运行脚本
# 配置项定义 $path = "test.properties" # 替换为你的配置文件实际路径 $hostNameToUncomment = "hostName1" # 替换为你需要取消注释的hostName值 $portNumToUncomment = "portNum1" # 替换为你需要取消注释的portNum值,不需要的话可以对应删减逻辑 # 逐行处理文件内容 $modifiedContent = Get-Content -Path $path | ForEach-Object { $currentLine = $_ # 处理所有hostName相关行 if ($currentLine -match '^#?\s*hostName\s*=\s*(.+?)\s*$') { $configValue = $matches[1].Trim() # 先统一注释当前匹配行 $currentLine = $currentLine -replace '^#?\s*', '# ' # 值匹配则取消注释 if ($configValue -eq $hostNameToUncomment) { $currentLine = $currentLine -replace '^#\s*', '' } return $currentLine } # 处理所有portNum相关行 elseif ($currentLine -match '^#?\s*portNum\s*=\s*(.+?)\s*$') { $configValue = $matches[1].Trim() $currentLine = $currentLine -replace '^#?\s*', '# ' if ($configValue -eq $portNumToUncomment) { $currentLine = $currentLine -replace '^#\s*', '' } return $currentLine } # 非目标配置行直接返回不修改 else { return $currentLine } } # 保存修改后的内容回原文件,指定UTF8编码避免乱码 $modifiedContent | Set-Content -Path $path -Encoding UTF8
逻辑说明
- 正则匹配兼容行开头带
#、不带#、前后有空格的所有hostName/portNum配置行,同时自动提取等号后的配置值 - 所有匹配到的hostName/portNum行先统一注释,确保默认所有相关配置都是关闭状态
- 仅当配置值和你指定的变量值相等时,才会去掉行开头的
#,实现仅保留目标配置项生效 - 其他无关配置行、注释行不会做任何修改
如果不需要处理portNum配置,直接删除对应的elseif分支逻辑即可。
内容的提问来源于stack exchange,提问作者Benny B
相关产品推荐
相关产品推荐

