关于PowerShell追加字符串至文本时产生换行的问题咨询
PowerShell脚本追加字符串出现换行的问题解决
我来帮你分析下这个问题哈~
问题根源
你当前的脚本里,Foreach-Object的处理逻辑有个小问题:当匹配到包含;stylesheets的行时,你写的$_ if ($_ -match ";stylesheets") { ";history" }会被PowerShell拆成两个独立的输出动作——先输出原行$_,然后单独输出;history。这两个输出是彼此独立的对象,所以Set-Content会把它们分别作为一行写入文件,自然就出现了换行分隔的情况,达不到你要的连续拼接效果。
修正后的脚本
要实现把;history直接追加到目标行的末尾,你需要把原行和追加字符串拼接成一个整体再输出,而不是分开输出。修改后的脚本如下:
(Get-Content K:\Temp\test.properties) | Foreach-Object { if ($_ -match ";stylesheets") { "$_;history" # 将原行与追加字符串拼接为单个字符串输出 } else { $_ # 不匹配的行保持原样输出 } } | Set-Content K:\Temp\test.properties
更精准的优化方案(可选)
如果担心原行末尾可能有空格、注释或者其他额外字符,或者只想匹配行尾的;stylesheets(避免误匹配行中间的相同内容),可以用-replace来实现更精准的替换:
(Get-Content K:\Temp\test.properties) | Foreach-Object { $_ -replace ";stylesheets$", ";stylesheets;history" } | Set-Content K:\Temp\test.properties
这里的$是正则表达式的行尾锚点,确保只替换行末尾的;stylesheets,安全性更高。
内容的提问来源于stack exchange,提问作者ebrodje
相关产品推荐
相关产品推荐

