Как отправить строку в качестве параметра в функции пакетного файла? - PullRequest
0 голосов
/ 28 марта 2012

привет, я делаю программу поиска веб-страниц с помощью командного файла Windows

перед поиском мне нужно сохранить HTML-код в переменную и регулярное выражение.

Я на Windows XP SP3

Интересно, как я могу отправить смешанную строку специального символа в качестве параметра функции

мой код здесь

cd curl-7.25

for /f "tokens=*" %%R IN ('curl.exe -G --max-redirs 3 http://www.google.com?') DO call:MyFunc %%R

pause

:MyFunc
echo %~1
goto:eof

проблема в "вызове: MyFunc %% R"

HTML-код включает в себя множество '<' и '>' (скобки)

и это интерпретируется как трубопровод.

которого я пытаюсь избежать.

любая помощь будет оценена

1 Ответ

0 голосов
/ 28 марта 2012

Вы не можете избежать содержимого %% R, как вы получаете его от curl.
Но вы можете справиться с задержкой расширения.

cd curl-7.25
set "curlCmd=curl.exe -G --max-redirs 3 http://www.google.com?"

setlocal DisableDelayedExpansion
for /f "tokens=*" %%R IN ('!curlCmd!') DO (
  set "line=%%R"
  call :MyFunc line
)
pause
exit /b

:MyFunc
setlocal EnableDelayedExpansion
echo !%~1!
rem ** Or you can use directly echo !line!
endlocal
exit /b

Сначала я отключаю отложенное расширение, в противном случае у вас возникают проблемы с восклицательными знаками и / или каретками.
И тогда я вызываю :MyFunc с именем переменной, а не с содержимым, так как вызов изменил бы содержимое.

И для доступа к содержимому я включаю отложенное расширение, так как отложенное расширение никогда не изменяет и не мешает содержимому переменной.

...