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

如何在Mac/Unix的zsh shell中执行Windows .cmd脚本?

解决zsh无法执行Windows CMD脚本及Azure API调用问题

核心原因

zsh是类Unix环境的shell,无法解析@echo off、rem、call这类Windows CMD专属语法,仅能识别跨平台基础命令(比如echo),直接在zsh中运行.cmd脚本必然报错。

高效解决办法

方案1:用原生Windows终端执行CMD脚本(最推荐)

直接切换到Windows CMD或PowerShell环境执行原脚本:

  • 打开Windows终端,切换到CMD/PowerShell标签页
  • 用cd命令进入modify-search.cmd所在目录
  • 直接执行:modify-search.cmd(无需加./前缀)
    该方案完全适配原脚本的CMD语法,无需修改任何内容,是最省心的方式。

方案2:将CMD脚本转换为zsh兼容版本

如果必须在zsh环境下执行,手动修改脚本适配zsh语法:

  • 替换@echo off为set +x(关闭命令回显)
  • 替换所有rem开头的注释为#
  • 删除call命令(zsh中直接执行目标脚本即可,无需call)
  • 替换timeout /t N为sleep N(N为秒数)
  • 变量替换:把%url%、%admin_key%改为$url、$admin_key,并在脚本开头定义变量:
    url="https://your-search-service-url"
    admin_key="your-admin-key-value"
    
  • 修正curl命令引号:zsh中若请求体包含特殊字符,建议用单引号包裹JSON内容避免转义问题,示例:
    curl -X PUT "$url" -H "Content-Type: application/json" -H "api-key: $admin_key" -d '{
      "your-json-body": "content"
    }'
    

方案3:修复VS Code REST Client的调用错误

getaddrinfo ENOTFOUND echo错误是因为.http请求文件混入了CMD的echo命令,导致REST Client误将echo当作域名解析。修正步骤:

  • 新建或编辑.http文件,只保留纯HTTP请求语法,删除所有CMD命令(如echo、set等)
  • 示例正确的Azure Search API请求:
    PUT https://your-search-service.search.windows.net/indexes/my-index?api-version=2023-11-01
    Content-Type: application/json
    api-key: YOUR_ADMIN_KEY
    
    {
      "name": "my-index",
      "fields": [
        {"name": "id", "type": "Edm.String", "key": true},
        {"name": "title", "type": "Edm.String"}
      ]
    }
    
  • 确保URL、api-key和请求体完全正确,无多余字符或命令。

手动替换变量失效的说明

POST/PUT请求失效通常是两个原因:

  • zsh中变量引用为$变量名而非%变量名%,之前的替换方式有误
  • 请求体JSON包含特殊字符(如双引号、空格),在zsh中未正确转义,改用单引号包裹JSON体即可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:33:28