使用批处理从请求中获取值的问题

Problem with getting values from request using batch

我是新手,我需要从 url 获取标签,例如:
tag_name 在 url https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest
所以我发现有人这样做是为了得到它:

for /f "tokens=1,* delims=:" %%A in ('curl -ks https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest ^| find "tag_name"') do (
    SET VERSION=%%B
    echo %VERSION%
)

但是有两个问题:

  1. 这是循环获取。没有更好的获取方式吗?
  2. 它 returns "4.2.4", 它的多余字符需要删除,(显然我需要像 4.2.4

谢谢大家。

这是一种选择:

@For /F Tokens^=4^ Delims^=^" %%G In ('%SystemRoot%\System32\curl.exe -ks
 "https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest" ^|
 %SystemRoot%\System32\findstr.exe /IR "\"tag_name\":" 2^>NUL') Do @Echo(%%G

您当然可以使用自己的代码并通过阅读您正在使用的命令的使用信息来修复它。您可以通过打开命令提示符 window、键入 for /? 并按 ENTER 键来完成此操作。只需更改您的定界符以包含额外的空格和逗号字符,并修改您的变量扩展以使用波浪号,应该适合您。

在处理语言时使用能够理解该语言的工具通常是个好主意。如果您使用的是受支持的 windows 系统,则可以使用 powershell.exe,就像可以使用 findstr.exe 一样。

powershell.exe -NoLogo -NoProfile -Command ^
    "(& curl.exe -ks https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest | ConvertFrom-Json).tag_name"

要将其放入 batch-file,您可以使用:

FOR /F "delims=" %%A IN ('powershell.exe -NoLogo -NoProfile -Command ^
    "(& curl.exe -ks https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest | ConvertFrom-Json).tag_name"') DO (SET "TAG_NAME=%%~A")
ECHO TAG_NAME is set to %TAG_NAME%

要使用 PowerShell 命令,您可以使用:

powershell.exe -NoLogo -NoProfile -Command ^
    (Invoke-RestMethod -Uri https://api.github.com/repos/pmmp/PocketMine-MP/releases/latest).tag_name