Ne elde etmek istiyorum
Belirli bir kalıba uyan birkaç URL vardır. söyle
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
İçlerinde '&' özel karakterleri olduğunu unutmayın.
Bu listeyi aşağıdaki örnekle oluşturmak istiyorum
http://example.com/page(*).html?arg1=xxx&arg2=yyy
ve (*)
sayıları ile değiştirilir 1,2,...,999
ve bir dosyaya kaydedin (say list.txt). URL'lerin çevresinde alıntı yapılmasına izin verilmez.
Kodum ve sorum
İlk önce böyle bir kodla denedim:
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
ve normal karakterden ziyade komut bağlayıcı olarak yorumlanan '&' meta karakteri nedeniyle başarısız oldu.
Sonra etkinleştirme gecikmeli genişlemesini denedim:
:genlist
setlocal enabledelayedexpansion
set "patt=%~1"
( for /l %%i in (0,1,%~2) do @echo !patt:(*)=%%i!) >list.txt
endlocal
exit /b
Bu, %%i!)
anlamadığım bazı kötü nedeniyle başarısız olur .
Ve üçüncü kez, yankılanacak olanı alıntılamaya çalıştım:
:genlist
setlocal enabledelayedexpansion
set "patt=%~1"
( for /l %%i in (0,1,%~2) do @echo "!patt:(*)=%%i!") >list.txt
endlocal
exit /b
Çalışır, ancak URL'ye istenmeyen alıntılar sunar.
Ve yankılanmanın değişmez olması, edebi bir dize değil, başım belada. Öyle olsaydı, doğrudan bu işaretten kaçabilirdim.
Ne yapmalıyım?
&
: değişmez dizgeden ziyade değişkende.
^&
.