批处理文件中循环遍历一堆网址

3

我正在尝试访问一堆网址(超过1000个)。以下是这些网址的样子:

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”部分。有人能帮忙吗?
2个回答

1

在@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!"
  )

0
在一个批处理中,对于元变量(在本例中为 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,因此可以通过!url:~-5!访问最后5位数字。

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


换句话说,将您的示例中所有的“%i”替换为“%%i”。在命令行上,正确的形式是“%i”,但在批处理文件内运行时,正确的形式是“%%i”。 - LinuxDisciple
@Magoo,它运行得很好。但我有另一个问题,似乎我的代码“0000%%i”会给出“000010”。然而,我想要的实际上是“00010”。我该如何解决这个问题?谢谢。 - ycenycute
@Magoo,谢谢回复。但这似乎不起作用。它试图访问"http:///!url:〜-5",而不是类似"http:///00012"的东西。 - ycenycute
对我来说完全正常。我怀疑您忘记了包括“setlocal enabledelayedexpansion”行,该行调用“delayedexpansion”模式,允许“!var!”形式访问当前变量值。 - Magoo

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