You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell写入bat文件时$progressPreference被替换为Continue如何解决

问题原因

你现在用的是双引号包裹的PowerShell Here-String(@" "@),这种结构默认会自动解析展开字符串内所有以$开头的PowerShell变量。$progressPreference是PowerShell的内置预设变量,默认值就是Continue,所以在你给$htmlexport赋值的阶段,这个变量就已经被替换成对应值了,不是写入文件的时候才替换的。

解决方法

两种方案任选一种即可:

方案1:改用单引号包裹的Here-String

单引号包裹的Here-String(@' '@)不会解析内部变量,会完全保留字符串原样:

$htmlexport = @'
powershell -Command "$progressPreference = 'silentlyContinue'; Invoke-WebRequest https://ftp.ncep.noaa.gov/data/nccf/com/hrrr/prod/hrrr.$m2/conus/hrrr.t$m21z.wrfsfcf00.grib2 -OutFile C:\OpenGrADS-2.2\data\hrrr\hrrr000.grb2"
exit
'@
$htmlexport | Out-File C:\OpenGrADS-2.2\001-HRRR\HRRR-DOWNLOADGRIBFILES.bat -Encoding UTF8

注意:如果你原来字符串里的$m2、$m21z是需要在PowerShell里提前展开的变量,就不要用这个方案,选方案2

方案2:双引号Here-String下转义$字符

对不需要展开的$符号前加PowerShell转义符反引号(`) 即可阻止变量解析:

$htmlexport = @"
powershell -Command "`$progressPreference = 'silentlyContinue'; Invoke-WebRequest https://ftp.ncep.noaa.gov/data/nccf/com/hrrr/prod/hrrr.$m2/conus/hrrr.t$m21z.wrfsfcf00.grib2 -OutFile C:\OpenGrADS-2.2\data\hrrr\hrrr000.grb2"
exit
"@
$htmlexport | Out-File C:\OpenGrADS-2.2\001-HRRR\HRRR-DOWNLOADGRIBFILES.bat -Encoding UTF8

这种方案下你原来需要展开的$m2、$m21z变量还是会正常解析替换,只有加了反引号转义的$progressPreference会保留原样输出。

内容的提问来源于stack exchange,提问作者Jason Warren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:24:01