我想从json文件中提取一个网址,然后使用批处理脚本将其存储到变量中。
下面是我的json文件。
{
"url": "https://api.github.com/repos/octocat/Hello-World/releases/1",
"html_url": "https://github.com/octocat/Hello-World/releases/v1.0.0",
"assets_url": "https://api.github.com/repos/octocat/Hello-World/releases/1/assets",
"upload_url": "https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
"tarball_url": "https://api.github.com/repos/octocat/Hello-World/tarball/v1.0.0",
"zipball_url": "https://api.github.com/repos/octocat/Hello-World/zipball/v1.0.0",
"id": 1,
"node_id": "MDc6UmVsZWFzZTE=",
"tag_name": "v1.0.0",
"target_commitish": "master",
}
我希望将"upload_url"
和{?name,label}"
之间的行存储到变量中。
https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets
我可以获取批处理脚本命令来实现此目的吗?
我尝试了以下命令:
for /f "tokens=2 delims=:" %%# in (' type tmpCurl.json^|find /i "upload_url"') do echo %%#
但是它给出了很多输出:
"https
答案 0 :(得分:1)
这应该是您所需要的:
@echo off
for /f "tokens=1,* delims=:" %%a in ('type tmpCurl.json ^| findstr /i "upload_url"') do (
for /f "tokens=1,* delims={" %%i in (%%b) do set "result=%%i"
)
echo %result%
第一个循环在:
分隔符上分割字符串,并将:
之前的所有内容分配给元变量%%a
,使您将下面的所有内容分配给%%b
https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
第二个循环在%%b
上拆分字符串{
并将{
之前的所有内容分配给%%i
,使我们拥有:
https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets
答案 1 :(得分:0)
根据您提供的.json
内容,对于您的batch-file来说,这样的内容就足够了:
@For /F Tokens^=3Delims^={^"^ %%A In ('Find "upload_url"^<"tmpCurl.json"')Do @Set "UURL=%%A"
@Set UURL 2>Nul&Pause
第二行只是为了向您显示已保存的变量及其值。
答案 2 :(得分:0)
由于末尾第二行的逗号,您的示例Json无效。
更好地使用可以处理Json的Json工具/脚本语言。
PowerShell一个衬里分批包装
:: Q:\Test\2019\05\18\SO_56197577.cmd
@Echo off
For /f "Usebackq delims=" %%U in (`powershell -NoP -C ^
"(Get-Content tmpCurl.json | ConvertFrom-Json).upload_url.split('{')[0]"
`) Do Set "upload_url=%%U"
set upload_url
样本输出
> Q:\Test\2019\05\18\SO_56197577.cmd
upload_url=https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets