PowerShell修改ini文件ProjectPath行无效问题求助
PowerShell修改INI文件行的问题解决
问题原因
你脚本里的foreach ($line in $lines)循环中,$line是原数组元素的副本,修改这个变量不会同步到原数组$lines,所以最终写入文件的还是原始内容。
解决方法
方法1:创建新数组存储修改后的行
通过循环将每一行(修改后的或原始的)添加到新数组,最后写入文件:
# 获取文件内容为行数组 $lines = Get-Content "C:\TEMP\test.ini" $modifiedLines = @() foreach ($line in $lines) { if ($line.StartsWith("ProjectPath=")) { $modifiedLines += "ProjectPath=%USERPROFILE%\Documents" } else { $modifiedLines += $line } } # 将修改后的内容写入文件 Set-Content "C:\TEMP\test.ini" $modifiedLines -Force
方法2:用For循环按索引修改原数组
For循环可以直接通过索引访问并修改原数组的元素:
$lines = Get-Content "C:\TEMP\test.ini" for ($i = 0; $i -lt $lines.Count; $i++) { if ($lines[$i].StartsWith("ProjectPath=")) { $lines[$i] = "ProjectPath=%USERPROFILE%\Documents" } } Set-Content "C:\TEMP\test.ini" $lines -Force
方法3:管道+ForEach-Object简化操作(推荐)
直接通过管道流处理每行内容,无需单独存储数组:
Get-Content "C:\TEMP\test.ini" | ForEach-Object { if ($_.StartsWith("ProjectPath=")) { "ProjectPath=%USERPROFILE%\Documents" } else { $_ } } | Set-Content "C:\TEMP\test.ini" -Force
额外提示
如果需要把%USERPROFILE%解析为实际的用户路径,替换成PowerShell环境变量语法$env:USERPROFILE即可,比如:
"ProjectPath=$env:USERPROFILE\Documents"
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

