【问题标题】:loop over a bunch of urls in batch file循环处理批处理文件中的一堆 url
【发布时间】:2016-11-18 22:17:45
【问题描述】:

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

url = "http://***/00001"
url = "http://***/00002"
...
url = "http://***/01000"

我想编写一个批处理文件来自动访问这些网址。我学到了一点关于如何编写批处理文件并在命令行中运行它的知识。看起来像这样

ECHO OFF

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

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

    ECHO finish %i
)

但它不起作用,我无法弄清楚如何在循环中更改 url 中的“00001”部分。有人可以帮忙吗?

【问题讨论】:

    标签: batch-file url for-loop curl


    【解决方案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!"
      )
    

    【讨论】:

      【解决方案2】:

      在一个批次中,元变量%(在本例中为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 的变化值,并且该值必须位于普通环境变量中以允许子字符串化。元变量不能直接子串化。当然,如果 %%i 从 10000001 变化到 10001000,url 可以直接分配给 %%i 的值,但从代码维护的角度来看,这并不明显。

      【讨论】:

      • 或者以另一种方式解释,将示例中的所有%i 实例替换为%%i。在命令行上,正确的形式是%i,但从批处理文件中运行时,正确的形式是%%i
      • @Magoo,它运作良好。但是我遇到了另一个问题,似乎我的代码“0000%%i”会给出“000010”。但是,我想要的实际上是“00010”。我该如何解决这个问题?谢谢
      • @Magoo,感谢您的回复。但这似乎不起作用。它尝试访问“http://***/!url:~-5!”,而不是“http://***/00012!”之类的东西
      • 对我来说非常好用。我怀疑您忽略了包含调用delayedexpansion 模式的setlocal enabledelayedexpansion 行,该模式允许!var! 表单访问当前变量值。
      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 2023-03-23
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多