Доброго утра!
Ещё раз извиняюсь - голова вчера была чугунная, попутал, видать, версии скрипта. Вот тот, о котором шла речь:
@echo off
set connection=Megafon
set time_a1=" 1:10:00,00"
set time_a2=" 7:50:00,00"
:LOOP
set connected=0
for /f "delims=" %%i in ('rasdial') do (
if "%%i"=="%connection:"=%" set connected=1
)
if %connected%==0 (
if /i "%time%" geq %time_a1% (
if /i "%time%" leq %time_a2% (
goto CONNECTING
)))
if %connected%==1 (
if /i "%time%" geq %time_a1% (
if /i "%time%" leq %time_a2% (
goto CONNECTED
)))
if %connected%==0 (
goto DISCONNECTED
)
if %connected%==1 (
goto DISCONNECTING
)
goto TIMEOUTing
:CONNECTING
echo %time% - "%connection%" connection not detected.
echo Dialing...
rasdial "%connection:"=%"
goto TIMEOUTing
:CONNECTED
echo %time% - "%connection%" connected
goto TIMEOUTing
:DISCONNECTING
echo %time% - "%connection%" connection is active.
echo "%connection%" are disconnecting...
rasdial "%connection:"=%" /DISCONNECT
goto TIMEOUTing
:DISCONNECTED
echo %time% - "%connection%" disconnected
goto TIMEOUTing
:TIMEOUTing
timeout /T 27
goto LOOP
То есть, в данном случае «%connection:"=%» означает — взять содержимое переменной окружения «connection» и убрать из него все включения кавычки «"» (поскольку после знака равенства в выражении ничего нет).
Да, похоже именно так. Спасибо большое! Наверное, в одном из предыдущих вариантов скрипта кавычки там могли появляться от случая к случаю, да?. Вчера это мне оказалось не по зубам.
Всё-таки меняет. Я даже на другом виндовсе сейчас попробовал. Итого и на XP и на 2003 команда "ipconfig^" ведёт себя так: прежде чем выдать справку ipconfig интерпретатор два раза запрашивает "Продолжить?" Все, что будет введено в этом диалоге, дополнит название команды, т.е. если ответить "123", то будет предпринята попытка выполнить "ipconfig123". Если нажать enter, то запрос повторится, а после второго пустого ответа будет выполнена просто команда "ipconfig". Каретка явно тут как-то замешана, вот я и подумал, что у нее есть ещё какие-то функции, мне неизвестные.
а вот когда интерпретатор «развернёт» строку «'ipconfig^|FIND "IP-"'» и начнёт обрабатывать саму последовательность команд «ipconfig|FIND "IP-"» — вот тогда символ «|» будет уже правильно воспринят как спецсимвол конвейера.
Вас понял, большое спасибо! Скажите, пожалуйста, а почему при втором проходе интерпретатор уже не будет учитывать символ каретки в качестве экрана для спецсимвола контейнера?
Приведите конкретный короткий пример, я уже запутался.
Я, на самом деле, даже не за пример переживаю, а просто не смог найти внятную информацию о правилах употребления одинарных кавычек. С двойными вроде всё более-менее понятно. В качестве конкретного короткого примера можно взять «'ipconfig^|FIND "IP-"'» из прошлого вопроса. С его помощью я теперь, конечно, сориентировался, что к чему, но хотелось бы почитать полный свод правил, касающийся одинарных кавычек и их отличий от двойных.