You need to enable JavaScript to run this app. bat脚本结合curl与for循环报( was unexpected at this time求助
优惠活动
大模型
产品
解决方案
定价
更多

bat脚本结合curl与for循环报( was unexpected at this time求助

批处理脚本报错及判断失效问题修复方案

一、( was unexpected at this time 报错修复

根因:

  1. 已开启延迟变量扩展,但在多层括号包裹的代码块中,使用%http%这种解析时展开的变量语法,脚本解析到这行时for循环还未执行,%http%是空值,直接导致括号语法解析混乱
  2. curl命令中的%{http_code}没有正确转义,批处理中单%会被识别为变量标记,解析出错
    修复方法:
  • curl命令中的%{http_code}转义为%%{http_code}
  • 括号块内所有变量引用改用延迟扩展语法!变量名!,而非%变量名%

二、if判断始终不生效修复

根因:

  1. 仍使用%http%解析时展开语法,此时http变量还未被赋值
  2. 判断语句两边引号不对称:左值%http%没有加引号,右值"400"加了引号,永远无法匹配
  3. 原代码中exit \b 1写法错误,反斜杠会导致exit命令执行失败
    修复方法:
  • 变量引用改为!http!,判断语句修改为对称引号格式if "!http!"=="400"
  • 将exit \b 1修正为exit /b 1

三、完整修正后代码

@echo off
SetLocal EnableDelayedExpansion & REM 所有变量作用域限制在当前脚本运行周期,执行时才展开而非解析时展开(提示:输出变量用 echo !output!)

REM 获取run.bat所在目录的完整路径(不含文件名)
set "wrapper_dir=%~dp1dist"
set "arch=amd64.exe"
set "system=windows"

mkdir "%wrapper_dir%" 2>nul & REM 2>nul屏蔽目录已存在的报错

REM 获取最新可用版本号
(for /f %%i in ('curl -f -s https://prysmaticlabs.com/releases/latest') do set "my_version=%%i") || (
    echo [31mERROR: 需联网运行.  ESC[0m
    exit /b 1
)
echo ESC[37m最新版本为 %my_version%.ESC[0m
IF defined USE_MY_VERSION (
    echo [33m检测到自定义版本变量 USE_MY_VERSION=%USE_MY_VERSION%[0m
    set "reason=按USE_MY_VERSION指定版本"
    set "my_version=%USE_MY_VERSION%"
) else (
    set "reason=自动选择最新发布版本"
)
echo 正在使用版本 %my_version%.

set "PROGRAM_REAL=%wrapper_dir%\program-%my_version%-%system%-%arch%"

if "%~1"=="program-real" (
    if exist "!PROGRAM_REAL!" (
        echo ESC[32mBeacon chain 已是最新版本.[0m
    ) else (
        echo ESC[35m正在下载Beacon chain %my_version% 到 !PROGRAM_REAL! (!reason!)ESC[0m
        for /f "delims=" %%i in ('curl --silent -w "%%{http_code}" -L "https://prysmaticlabs.com/releases/beacon-chain-!my_version!-!system!-!arch!" -o "!PROGRAM_REAL!" ') do (
            set "http=%%i"
            echo 响应状态码:!http!
        )
        if "!http!"=="400" (
            echo ESC[35m未找到对应版本 %my_version% 的程序文件ESC[0m
            exit /b 1
        )       
        curl --silent -L "https://prysmaticlabs.com/releases/beacon-chain-!my_version!-!system!-!arch!.sha256" -o "!wrapper_dir!\beacon-chain-!my_version!-!system!-!arch!.sha256"
        curl --silent -L "https://prysmaticlabs.com/releases/beacon-chain-!my_version!-!system!-!arch!.sig" -o "!wrapper_dir!\beacon-chain-!my_version!-!system!-!arch!.sig"
    )
)

四、额外优化项

  • 所有路径、URL都用双引号包裹,避免路径含空格时执行报错
  • mkdir命令加2>nul屏蔽目录已存在的冗余报错
  • 参数判断改为if "%~1"=="program-real",%~1自动去除参数外层引号,避免传参带引号时判断失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 10:12:04