使用gh issue list导出CSV时遇.number命令未识别错误求助
解决Windows CMD/批处理导出GitHub Issues为CSV的命令错误
问题根源
你的命令是基于Unix Shell(如Bash)语法编写的,直接在Windows CMD或批处理文件中执行时,会因为语法不兼容触发错误:
- CMD会错误解析JQ脚本中的
.number等语法,将其识别为外部命令 - 行尾的
^续行符在CMD中需要严格无空格,且易引发解析混乱 $(date)是Unix的命令替换语法,CMD不支持
解决方案
推荐两种可靠的修正方式:
方式1:将JQ过滤逻辑保存为单独文件(最稳妥)
- 创建
filter.jq文件,写入以下内容:
["number","title","assignees","state","labels","url"], (.[] | [.number, .title, (.assignees | if length==0 then "Unassigned" else map(.login)|join(",") end), .state, (.labels | map(.name)|join(",")), .url ] ) | @csv
- 在CMD或批处理文件中执行以下命令:
:: 生成标准化日期格式(避免依赖系统区域设置) for /f "delims=" %%d in ('powershell -Command "(Get-Date).ToString('yyyy-MM-dd')"') do set "today=%%d" :: 导出Issues到CSV gh issue list --limit 10000 --state all --json number,title,assignees,state,labels,url | jq -r -f filter.jq > issues-%today%.csv
方式2:直接在CMD中转义特殊字符(无需额外文件)
如果不想创建JQ文件,可将JQ脚本中的双引号用""转义(CMD中双引号内部的双引号需用两个双引号表示),同时替换日期生成逻辑:
for /f "delims=" %%d in ('powershell -Command "(Get-Date).ToString('yyyy-MM-dd')"') do set "today=%%d" gh issue list --limit 10000 --state all --json number,title,assignees,state,labels,url | jq -r "[""number"",""title"",""assignees"",""state"",""labels"",""url""], (.[] | [.number, .title, (.assignees | if length==0 then ""Unassigned"" else map(.login)|join("","") end), .state, (.labels | map(.name)|join("","")), .url]) | @csv" > issues-%today%.csv
关键修改点说明
- 分离JQ逻辑:避免CMD对JQ脚本中的括号、引号等特殊字符进行错误解析
- 替换日期生成:用PowerShell生成
yyyy-MM-dd格式的日期,替代Unix的$(date),同时避免依赖CMD的%date%变量(格式受系统区域影响) - 转义双引号:CMD中双引号字符串内部的双引号必须用
""转义,否则会提前终止字符串解析
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

