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

问题描述 投票:0回答:4

我在网上尝试了很多例子,但无法使其工作。我对此很陌生,所以请原谅我的原始问题。

说我有这个:

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

或者像这样

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 

两者都不起作用,我的批处理脚本立即关闭。

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

batch-file curl
4个回答
5
投票

感谢@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 


2
投票

根据您自己的答案代码,无需使用 将结果保存到 ,然后将该变量值与已知值进行比较。您可以通过 传输结果来查看它是否与您的已知值匹配。

示例

@%__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

但是您仍然可以这样做,而不创建变量。

@Echo Off
SetLocal EnableExtensions
For /F %%G In ('%__AppDir__%curl.exe -s -o NUL "www.google.com"
 -w "%%{http_code}\n"') Do (Echo response code is %%G
    If %%G Equ 200 (Echo 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
投票

其他答案都很好,但我不会使用 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
)
© www.soinside.com 2019 - 2024. All rights reserved.