如何编写PowerShell脚本修改%userprofile%\AppData\Roaming\下.cfg文件的值?是否受用户路径差异影响?
用PowerShell修改用户专属目录下的.cfg配置文件
当然可以实现,而且完全不用担心用户路径差异的问题——PowerShell内置的环境变量能自动适配当前用户的专属目录。
核心思路
PowerShell里的$env:APPDATA变量就是系统预设的、指向当前用户%userprofile%\AppData\Roaming的路径,不管哪个用户运行脚本,这个变量都会自动指向对应用户的目录,完美解决路径差异问题。
具体脚本示例
假设你要修改example.cfg文件中max_connection_count这个键的值为10,脚本可以这么写:
# 拼接目标配置文件的完整路径 $configPath = Join-Path -Path $env:APPDATA -ChildPath "example.cfg" # 先检查文件是否存在,避免报错 if (-not (Test-Path -Path $configPath)) { Write-Error "配置文件不存在:$configPath" exit 1 } # 定义要修改的目标键和新值 $targetKey = "max_connection_count" $newValue = "10" # 读取文件内容并修改指定键值对 (Get-Content -Path $configPath) | ForEach-Object { # 用正则匹配键值对,兼容键和=前后的空格 if ($_ -match "^(\s*$targetKey\s*=\s*).*$") { # 替换为新值 $matches[1] + $newValue } else { # 不匹配的行原样保留 $_ } } | Set-Content -Path $configPath -Encoding UTF8 Write-Host "配置文件修改完成"
关键细节说明
- 路径适配:
$env:APPDATA是系统级环境变量,每个用户会话中都会自动指向自己的AppData\Roaming目录,无需手动拼接路径。 - 文件锁定问题:用
(Get-Content ...)的方式读取文件,会一次性把内容加载到内存,避免文件被持续锁定导致无法写入。 - 正则灵活性:如果你的.cfg文件键值对用的是其他分隔符(比如冒号
:),只需要把正则里的=换成对应的符号即可。 - 编码适配:
-Encoding UTF8可以根据实际文件编码调整,比如ASCII、Unicode等,避免乱码。
内容的提问来源于stack exchange,提问作者Andhony Torres-Luna
相关产品推荐
相关产品推荐

