PowerShell读取文本文件参数值时如何消除结果空行?
解决PowerShell提取配置参数时的空行问题
我来帮你搞定这个问题!首先咱们得弄明白为什么会出现空行:你原来的命令里用Split('= ')来分割行内容,这个分隔符是等于号加空格,但如果配置行里的空格格式有变化,或者分割后返回的数组包含了空白元素,PowerShell输出数组时就会把每个元素单独换行,导致出现空行。而且你的命令没有指定只取分割后的第二个值(也就是参数值),所以整个数组被赋值给$asid,输出时就会有多余的空行。
下面给你两个靠谱的解决方案,随便挑一个用就行:
方案1:优化分割逻辑,精准提取值
直接用=作为分隔符,并且限制只分割成两部分,然后取第二部分再修剪掉多余的空格/换行:
$asid = Get-Content -Path config.cfg | Select-String -Pattern 'NW_GetSid' | ForEach-Object { $_.Line.Split('=', 2)[1].Trim() }
Split('=', 2):把行内容按=分成最多两部分,避免参数值里有=时被误分割[1]:取分割后的第二部分(也就是=后面的内容)Trim():去掉内容前后的空格、换行符等空白字符,确保只拿到干净的ABC
方案2:用正则表达式精准匹配(更推荐)
正则表达式能适配配置行里的各种空格格式(比如NW_GetSid=ABC或者NW_GetSid = ABC),稳定性更强:
$asid = (Get-Content -Path config.cfg -Raw | Select-String -Pattern 'NW_GetSid\s*=\s*(.*)' | Select-Object -ExpandProperty Matches).Groups[1].Value
-Raw:把整个配置文件读成一个字符串,方便正则匹配- 正则
NW_GetSid\s*=\s*(.*):匹配NW_GetSid,后面允许任意数量的空格,再匹配=,再允许任意数量的空格,最后捕获所有后续内容(也就是参数值) Groups[1].Value:直接提取捕获的参数值,一步到位
这两个方法都能让$asid变量只存储ABC,不会出现空行~
内容的提问来源于stack exchange,提问作者hans
相关产品推荐
相关产品推荐

