在批处理脚本中将curl命令的输出存储到变量中

3

我尝试了很多在线示例,但无法使其正常工作。由于我是新手,请原谅我的初级问题。

假设我有以下内容:

curl "www.google.com" -o /dev/null -s -w "%{http_code}\n"

在CMD窗口中运行此命令,会返回响应代码。
200

这是预期的结果。

我希望能在批处理脚本中执行类似以下操作,同时使用curl命令的输出来设置一个变量。 我在网上找到的所有示例都是这样的:

set res = $(curl "www.google.com" -o /dev/null -s -w "%{http_code}\n")
echo %res%
pause

or like this

FOR /F "tokens=* USEBACKQ" %%F IN (`curl www.google.com -o /dev/null -s -w "%{http_code}\n"`) DO ( SET var=%%F ) 
ECHO %var%
pause 

两种方法都没有奏效,我的批处理脚本会立即关闭。

非常感谢任何反馈或帮助。 谢谢。


4
要将命令提示符的结果作为变量获取,您需要使用For /F %G In ('%__AppDir__%curl.exe -s -o NUL "https://www.google.com" -w "%{http_code}\n"') Do @Set "var=%G"。如果要在批处理文件中执行此操作,则可以使用for命令帮助信息中的建议 for /?,该信息指出“要在批处理程序中使用FOR命令,请指定%%variable而不是%variable。”,您应该这样做:@For /F %%G In ('%__AppDir__%curl.exe -s -o NUL "https://www.google.com" -w "%%{http_code}\n"') Do @Set "var=%%G"。_注意:我不建议出于任何原因使用此域名_。 - undefined
在批处理文件中,% 符号在 {http_code} 前面需要通过加倍来转义,就像 %%{http_code} 这样... - undefined
4个回答

4
感谢@Compo的贡献,以下是针对其他人的格式化答案。
@echo off

For /F %%G In ('%__AppDir__%curl.exe -s -o NUL "www.google.com" -w "%%{http_code}\n"') Do Set "response=%%G"
echo response code is %response%

IF %response% == 200 (
    ECHO was able to ping google
) ELSE (
    ECHO unable to ping google
)

pause 


1
正如他在评论中提到的那样@Compo:
“要将命令的结果作为变量获取到命令提示符中,您需要使用For /F。”
@echo off
Title Store curl command output in a variable in batch script
Set "MyCommand=curl "www.google.com" -o NUL -s -w "%%{http_code}""
@for /f %%R in ('%MyCommand%') do ( Set VAR=%%R )
echo %VAR% 
pause

1
根据您自己的答案代码,无需使用将结果保存到中,然后将该变量值与已知值进行比较。相反,您可以通过将结果导入管道以查看是否与已知值匹配。
示例
@%__AppDir__%curl.exe -s -o NUL "www.google.com" -w "%%{http_code}" ^
 | %__AppDir__%findstr.exe /X "200" 1> NUL && (Echo Ping Succeeded
) || Echo Ping Failed
@Pause

实际上只有一行代码,为了方便阅读而分成多行,你可以在中像这样编写:

%__AppDir__%curl.exe -s -o NUL "www.google.com" -w "%{http_code}" | %__AppDir__%findstr.exe /X "200" 1> NUL && (Echo Ping Succeeded) || Echo Ping Failed

或者像这样使用

@(%__AppDir__%curl.exe -s -o NUL "www.google.com" -w "%%{http_code}" | %__AppDir__%findstr.exe /X "200" 1> NUL && (Echo Ping Succeeded) || Echo Ping Failed) & Pause

0
其他答案都不错,但我不会使用CURL仅仅测试我们是否能够访问一个网站。
@echo off
ping google.com -n 1 >nul 2>&1 
if %errorlevel% equ 1 (
  echo EHHH..NO Google is not down, we are
) else (
  echo HURRAH MAN We are OK
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接