Тема: CMD/BAT: Бесконечный цикл в for без меток (Идеи ?)
Нужен бесконечный цикл в теле for
на подобие for /l - но нескончаемый и в то же время "интерактивный", т.е. выполняющий в итерации последовательно все действия
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Нужен бесконечный цикл в теле for
на подобие for /l - но нескончаемый и в то же время "интерактивный", т.е. выполняющий в итерации последовательно все действия
дико извиняюсь за тупость
for /l %x (0,0,0) do echo %xИнтересно. А какова была цель-то? И почему именно «for»?
start "" /i /b cmd /q /v:on /c "for /l %x in (0,0,0) do (ping -n 1 -w 1000 0.0.0.1 > nul & title !date! !time!)"smaharbA, всё равно не понятно. Поясните словами, пожалуйста.
часы в заголовке командной строки, можно конечно и стартануть пакетник, но подумалось как из самой строки
позырил свои "болванки" пакетников и обнаружил в них for /l %x in (0,0,0) ![]()
навеяло увиденной темой про powershell и часы в заголовке
smaharbA, спасибо, ясно. Я так и предполагал. У меня, правда, эти часы «стоят»
, потому решил уточнить.
Update: Вот так «пошли»:
cmd.exe /q /v:on /c "for /l %x in (0,0,0) do (ping -n 1 -w 1000 127.0.0.1> nul & title !date! !time!)"там суть в start "" /b из командной строки
Шут его знает. В оригинальном виде часы у меня просто замирали в начальном состоянии.
идея была в том, что бы запустить работающие часы которые не будут препятствовать интерактивной работе
может в каких системах и не отрабатывает
у меня отрабатывает и при запуске в командном интерпретаторе и если запустить в фаре, мигает только в фаре при переходе по каталогам и в момент начала просмотра/редактирования файлов
Ох ты какой трюк. Работает ![]()
Достойно Коллекции.
Когда запускаю эти часы, то avp.exe (Касперский) загружает процессор почти на 50%, закрываю окно консоли с часами, загрузка падает до 0%. Странная реакция.
У меня эти часы стояли, но лишь теперь понял почему. Возможно, у alexii та же причина. Просто у меня CMD.EXE сразу запускается с ключом /V (через ярлык), поэтому текущее значение !date! !time! подставлялось в командную строку уже при запуске. А вот, если экранировать восклицательные знаки
start "" /i /b cmd /q /v:on /c "for /l %x in (0,0,0) do (ping -n 1 -w 1000 0.0.0.1 > nul & title ^!date^! ^!time^!)"то работает независимо от того, была включена перед этим отложенная подстановка или нет.
(Ну, или так
start "" /i /b cmd /q /c "for /l %x in (0,0,0) do (ping -n 1 -w 1000 0.0.0.1 > nul & call title ^%date^% ^%time^%)")
Можно и в Коллекцию.
бесконечность
Arigato, грузит систему - пинг [самопинг?] в качестве паузы (кстати основательно).
А каперский - как вытекающее.
Писал я как-то для замены этих неудобств процедуру - концептуальную фишку (чуть более точнее и с градацией до милисекунд) в качестве паузы.
Надо будет попозже в коллекцию закинуть.
Arigato, грузит систему - пинг [самопинг?] в качестве паузы (кстати основательно).
Не грузит.
А каперский - как вытекающее.
Не вытекающее. Это и есть причина.
> Не грузит
Это когда как - смотря в какой ситуации и на какой машинке.
А причина или следствие, кто его знает... ![]()
грузит систему - пинг [самопинг?] в качестве паузы (кстати основательно).
0-2% — это основательно?
Писал я как-то для замены этих неудобств процедуру - концептуальную фишку (чуть более точнее и с градацией до милисекунд) в качестве паузы.
Ждём-с.
Бывает что куллер процессора начинает изрядно гудеть (вероятно - угнетает фаервол) и доставляет неудобства.
>Ждём-с.
Чтобы Вы в очередной раз, в порыве конгнитивного диссонанса и соблимированной злобы (накопленной за пол-года мучений от борьбы с моей грандиозной эНЛПятиной) обгадили мой пусть даже высакоинтеллектуальный, пусть ДэХаЕшный и сверхконцептуальный, но всё же "банный стыд"? ![]()
Зачем же. Да и прав что-то нехватает чтоб в Коллекцию "гадить". ))
дэль.
А давайте лучше устроим конкурс (тест Айзека)) - я поясняю суть концепта, а вы предложите свои варианты решения второй части задачи. А-ля "мозговой штурм". ![]()
Думаю наберётся несколько решений. Может у кого-то будет и пооптимальнее и поинтереснее чем у меня.
Суть проста: start /wait ....
Остаётся лишь подобрать подходящую комбинацию команд, которая отрабатывалась бы за определённое время (1s. или N-ms), но главное чтобы была стабильность и без нагрузки на ресурсы.
Варианты?
Суть проста: start /wait ....
… но главное чтобы была стабильность и без нагрузки на ресурсы.
START /WAIT нужно, если вызывается неконсольное приложение, значит — внешняя программа; а это всё равно обращение к диску, т.е. нагрузка на ресурсы.
Но, думаю, ты просто блефуешь.
Ну вот, wisgest опять завалил тест Айскета уже с первой попытки, даже не начав его решать... ![]()
> ...если вызывается неконсольное приложение...
Ну с такой железной логикой ("If-Then-Else") очень сложно поспорить. ![]()
> значит - внешняя программа
Вообще говоря, командный интерпретатор cmd.exe, за исключением скудного набора встроенных ф-ций for,if,call.., основан на вызове внешних программ (т.е. команд). Это так, на заметку. ![]()
p.s. start/w/b echo Я НЕвнешнее, ниразу НЕнеконсольное app.
[Удалено несущественное.]
start/w/b echo Я НЕвнешнее, ниразу НЕнеконсольное app.
START/W/B APP.EXE — если APP.EXE консольное, что-то не вижу преимуществ перед простым вызовом APP.EXE (может, изменение приоритета?).
START/W/B INNER_COMMAND — это на самом деле
START/W/B %ComSpec% /K INNER_COMMAND — т.е. никуда не годится.
Эко Вас занесло..."start - для гуи, Гуя, хотя нет. Куя. Но тут воще хоть и куя, но ведь cmd с ключок /К. Не, не годится".
Суть концепта (гл. половину) я показал.
Не нужно пытаться опровергать - всё работает.
От вас только ком.строка.
Из крайности в крайность, То "блеф", то "start не тянет", то перебор попыток опровержения...
Это даже не "If-Then-Else", А самый натуральный "Do Loop без условия выхода цикла". ![]()
Завязывайте с демагогией, рефрейминг - это не Ваше. )
p.s. за-дер-ж-ка...
debug.exe далее хоть 15 мс, меньшего не получите, получите в любой момент до 100 нс точность, но цикл с меньшим периодом нет
После покажу, "я наслаждаюсь сладострастным трепетом ожидания". ![]()
Я для того и положил концепт, а не конкретную реализацию;
Объяснил принцип действия и предложил мозговой штурм, дабы "Разроботчеки" перестали подражать и копировать, а попробовали бы разработать, предложили свои варианты "затяжной команды" (в тендеме с start/b/w).
Например та же:
DIR %windir%/system32>nul
даёт неплохую задержку;
даже множественный CALL пустой процедуры.
Но они нагружают ресурсы,так что нужно подключить смекалку. ))
> debug.exe
smahabrA, это через INT-прерывание?
Чтож, если у разроботчиков нет никаких идей, то я пожалуй покажу свой герметичный замес. ![]()
:sleep (ms)
set/a n=%1-370
echo %time%
start /min/w mshta "javascript:setTimeout('close()',%n%)"
echo %time%
exit/b
Только суть, без колдунства с невидимыми окнами и иже с ним.
Я разочарован. Признаюсь, я ожидал чего-то большего чем очевидные WScript.Sleep() или window.setTimeout(), которых просто постеснялся упоминать. Мне кажется, Aскет, судя по ранее им сказанному
start/w/b echo Я НЕ_внешнее, ни_разу НЕ_неконсольное app
первоначально имел в виду другое решение, но обнаружил в нём изъян и выложил первое попавшее под руку.
Если же вернуться к исходной задаче, то лучше будет составить скрипт наподобие «VBScript: Как поменять заголовок консольного окна?» и вызвать его через START /B CSCRIPT …
>Мне кажется, судя по ранее сказанному...
Нет, Аскет ранее лишь опровергал вашу неверную и основанную на банальной логике т.з. по поводу команды start (дабы в конец вас запутать, да-да)
> очевидные window.setTimeout
Судя по всему (сами так ничего и не предложили), wisgest не только постеснялся, но просто не додумался. )
Да и факт налицо - работает.
Важна точность задержки и отсутствие нагрузки.
>cscript
Это уже из разряда комбинашек. Далековато оно от православного и расово-чистого BATch.
Нет, Аскет ранее лишь опровергал вашу неверную и основанную на банальной логике т.з. по поводу команды start
Которая оказалось верной.
(дабы в конец вас запутать, да-да)
Как вы к нам, так будем и мы к вам.
Важна точность задержки и отсутствие нагрузки.
Точность? Опережение где-то на пол-секунды при 3-секундной задержке. Думаю, она будет меняться от машины к машине.
Отсутствие нагрузки?
for /l %i in () do @start /min/w mshta "javascript:setTimeout('close()',200)"— где-то 40% загрузки одноядерного ЦП.
Сравним
// eval.js
eval(unescape(WScript.Arguments.Item(0)));for /l %i in () do @cscript //nologo eval.js WScript.Sleep(200)— около 25%
for /l %i in () do @start /w wscript eval.js WScript.Sleep(200)— то же самое.
>cscript
Это уже из разряда комбинашек. Далековато оно от православного и расово-чистого BATch
Чем CSCRIPT менее кошерно чем MSHTA или однократное обращение к CScript.EXE — чем многократный вызов ping.EXE?
>40%
У Вас где-то ошибка. Синтаксическая, но скорее семантическая.
Или Вы опять блефуете?
> Точность?
Ога. У меня при вызове n-370 выдаёт стабильно точную задержку (лишь иногда +/- 4ms) с нагрузкой на ЦП 0%.
>CSCRIPT
Да, чем вызов CSRIPT с доп JS-файлами кошерней портабельного inline-вызова MSHTA?
Вы бы лучше поискали способы обращения к системному таймеру, чем очередной раз пытать счастье в попытках "изфекаливания оппонента". ![]()
У меня при вызове n-370 выдаёт стабильно точную задержку (лишь иногда +/- 4ms) с нагрузкой на ЦП 0%.
А у меня при n-100 и то, если n делится на 1000 (иначе отклонение больше).
Нагрузка 0% будет при большой задержке, но не в момент запуска MSHTA (или чего угодно), что я и показал вызвав этот трюк в цикле с малой задержкой (без каких либо семантических или синтаксических ошибок),
заодно ответив на вопрос:
>CSCRIPT
Да, чем вызов CSRIPT с доп JS-файлами кошерней портабельного inline-вызова MSHTA?
— Большей «лёгкостью на подъём». А от использования дополнительного файла портабельность страдает очень несущественно.
Вы бы лучше поискали способы обращения к системному таймеру, чем очередной раз пытать счастье в попытках "изфекаливания оппонента".
Где уж нам до вас.
> если n делится на 1000
Ну а зачастую именно так и требуется.
Минимальный порог кстати ~42ms (с параметром 0).
> Где уж нам до вас.
Ну вы хотя бы пробуйте, старайтесь.
Я понимаю что я как "недостижимый Эверест" и Полярная звезда, но ведь есть к чему стремиться. Не опускайте рук. ![]()
Любая попытка к творчеству и исследованиям в разы полезней любых излияний унылого скепсиса и самой отборной копипасты.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться