Чего я хочу достичь
Есть несколько URL, соответствующих определенному шаблону. сказать
http://example.com/page1.html?arg1=xxx&arg2=yyy
http://example.com/page2.html?arg1=xxx&arg2=yyy
....
http://example.com/page999.html?arg1=xxx&arg2=yyy
Обратите внимание, что в них есть специальные символы «&».
Я хотел бы сгенерировать весь этот список по следующей схеме
http://example.com/page(*).html?arg1=xxx&arg2=yyy
и (*)
заменили числами 1,2,...,999
и сохраните его в файл (скажем, list.txt). Кавычки вокруг URL не допускаются.
Мой код и вопрос
Сначала я попробовал с таким кодом:
call :genlist "http://example.com/page(*).html?arg1=xxx&arg2=yyy" 999
exit /b
:genlist
:: given pattern abc(*), generate list abc0, abc1,abc2, ..., abc10, ... abc999 and save them to a file
:: parameters: %1 the pattern.
:: %2 the max number substituting the wildcard
set "patt=%~1"
( for /l %%i in (0,1,%~2) do @echo %patt:(*)=%%i %) >list.txt
exit /b
и потерпел неудачу из-за метасимвола «&», интерпретируемого как командный соединитель, а не как обычный символ.
Затем я попробовал enable-delayed-extension:
:genlist
setlocal enabledelayedexpansion
set "patt=%~1"
( for /l %%i in (0,1,%~2) do @echo !patt:(*)=%%i!) >list.txt
endlocal
exit /b
Это терпит неудачу из-за некоторого плохого вокруг %%i!)
что я не понимаю.
И в третий раз я попытался процитировать это:
:genlist
setlocal enabledelayedexpansion
set "patt=%~1"
( for /l %%i in (0,1,%~2) do @echo "!patt:(*)=%%i!") >list.txt
endlocal
exit /b
Это работает, но вводит нежелательные цитаты в URL.
И у меня проблемы с тем, что эхо должно быть переменной, а не литеральной строкой. Если бы это было так, я бы смог избежать этого амперсанда.
Что я должен делать?