Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 在批处理文件中循环一组URL_Batch File_Url_For Loop_Curl - Fatal编程技术网

Batch file 在批处理文件中循环一组URL

Batch file 在批处理文件中循环一组URL,batch-file,url,for-loop,curl,Batch File,Url,For Loop,Curl,我试图访问一堆URL(超过1000个)。以下是URL的外观 url = "http://***/00001" url = "http://***/00002" ... url = "http://***/01000" 我想写一个批处理文件来自动访问这些URL。我学习了一点如何编写批处理文件并在命令行中运行它。像这样的东西 ECHO OFF FOR /L %i IN (1,1,1000) DO ( curl -XGET "http://***/0000%i" ECHO fi

我试图访问一堆URL(超过1000个)。以下是URL的外观

url = "http://***/00001"
url = "http://***/00002"
...
url = "http://***/01000"
我想写一个批处理文件来自动访问这些URL。我学习了一点如何编写批处理文件并在命令行中运行它。像这样的东西

ECHO OFF

FOR /L %i IN (1,1,1000) DO (

    curl -XGET "http://***/0000%i"

    ECHO finish %i
)

但它不起作用,我也不知道如何在循环中更改url中的“00001”部分。有人能帮忙吗?

在批处理中,元变量(
i
在本例中)的
%
需要加倍。对于每个
%i


如果需要5位变量,则

@ECHO OFF
setlocal enabledelayedexpansion

FOR /L %%i IN (1,1,1000) DO (
  set /a url=10000000+%%i
  curl -XGET "http://***/!url:~-5!"

  ECHO finish %%i
)
将10000000添加到
%%i
可确保
url
中的值为10000001..10001000,以便
可以访问最后5位数字!网址:~-5


关键点是需要调用
delayedexpansion
,以允许访问
url
的变化值,并且该值必须位于普通环境变量中,以允许子字符串。元变量不能直接子字符串化。当然,
url
可以直接分配给
%%i
的值,如果
%%i
的值从10000001到10001000不等,但从代码维护的角度来看,这并不明显。

关于@Magoo的答案的相同想法,但处理字符串:

@echo off
setlocal enabledelayedexpansion

set "$BaseUrl=http://****/"

for /l %%a in (1,1,1000) do (
  set "$Number=0000%%a"
  curl -XGET "%$BaseUrl%!$Number:~-5!"
  )

或者以另一种方式解释,将示例中的
%i
的所有实例替换为
%i
。在命令行上,正确的表单是
%i
,但是当从批处理文件内部运行时,正确的表单是
%i
@Magoo,它工作得很好。但我还有一个问题,我的代码“0000%%I”似乎会给出“000010”。然而,我想要的实际上是“00010”。我该如何解决这个问题?Thanks@Magoo,谢谢你的回复。但它似乎不起作用。它试图访问“http://***!url:~-5!”,而不是像“http://***/00012!”这样的东西,对我来说效果非常好。我怀疑您忽略了包含
setlocalenabledelayedexpansion
行,该行调用
delayedexpansion
模式,该模式允许
!瓦尔窗体以访问当前变量值。