Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/35: Рейтинг темы: голосов - 35, средняя оценка - 4.94
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
1

Самовосстанавливающиеся батники

18.08.2013, 19:22. Показов 6697. Ответов 56
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача такая: есть 2 батника. Они включены и работают постоянно. Если удалить один батник, то он автоматически должен быть восстановлен вторым. Если удалить второй, то он тоже должен быть восстановлен первым.
Я пытался через
Bash
1
2
3
4
5
6
@echo off
:x
if not exist %1 (
 echo ... >1.bat
) 
goto x
Получается рекурсия...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2013, 19:22
Ответы с готовыми решениями:

Самовосстанавливающиеся батники
тема уже была — https://www.cyberforum.ru/cmd-bat/thread939816-page3.html вот решение: ...

Батники
Кому не сложно вспомните или просто разомнитесь: 1) пакетный файл, предназначенный для...

Помогите создать батники
bat-файл для поиска файлов определенного типа с исключением некоторых папок и перемещение найденных...

Батники для автоматизации использования PuTTY
Всем доброго времени суток! Задачка такая: Имееются некие сервера, IP адреса которых сохранены...

56
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 18:20 21
Author24 — интернет-сервис помощи студентам
MihaniX, ну так я это и делаю.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.08.2013, 19:15 22
MihaniX, чтобы сделать такой бат, нужно понять что он еще должен делать, кроме как следить друг за другом.

Цитата Сообщение от MihaniX Посмотреть сообщение
ПОЖАЛУЙСТА!!! НАПИШИТЕ ЭТИ 2 СТРОЧКИ КОДА!!!
Да, пожалуйста:

Обозвать его либо 1.bat, либо 2.bat

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
SetLocal
if "%~n0"=="1" (set Friend=2.bat) else (set Friend=1.bat)
 
:: ---- здесь код программы, который выполнится 1 раз.
:: Ведь какую-то задачу Batch должен выполнять, кроме как самовосстанавливаться.
 
for /L %%? in (0 0 0) do (
  if not exist "%Friend%" (
    find /V "" < "%~f0" > "%Friend%"
    start "" "%Friend%"
    ping -n 2 127.1 >NUL
  )
)
Скрипт восстанавливает Friend (друга) из кода самого себя.

P.S. Я кажется понял, с чем у Вас возникла проблема - с именами файлов.
Чтобы один и тот же код мог восстанавливать как из 1-го скрипта 2-ой, так и из 2-го скрипта 1-й.

Добавлено через 5 минут
Гы, а скрипт то живучий получился у меня: после удаления файла - продолжает работать.
1
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 19:19 23
Dragokas, чет я совсем запутался... зачем такое громоздкое решение?
я правильно понял:
Bash
1
find /V "" < "%~f0" > "%Friend%"
это заменитель команды copy ?
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.08.2013, 19:26 24
Borodа, привычка.

Цитата Сообщение от Dragokas Посмотреть сообщение
после удаления файла - продолжает работать.
Перепишите в виде классического Goto, тогда код будет крутиться в основном потоке и при удалении файла указатель сместится - скрипт должен моментально вырубиться.
Теоретически, нужно еще добавить проверку на - запущен ли процесс батника.

Не по теме:

FraidZZ, почитал про квайны. Мозг сламал.
То, что они пишут + с условием: нельзя считывать исходник из самого себя - такое невозможно, ИМХО (выходит некий рекурсивный текст исходника).

0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 19:30 25
Цитата Сообщение от Dragokas Посмотреть сообщение
Перепишите в виде классического Goto
ну мое решение именно такое
заменить его на непрерывный цикл и будет "неубиенный".
0
Особый статус
Эксперт WindowsВирусоборец
8428 / 1707 / 87
Регистрация: 15.04.2011
Сообщений: 5,515
19.08.2013, 19:36 26
ну и в папку с самим сабой не стоит помещать-иначе рекурсивно можно очистить содержимое.
а в разных папках-затроенный батник-будет неубиваем.
рандомные директории...рандомные имена...
а если еще с правами и настройками поиграться...то тогда может монстр получиться,придется долго этого глиста ловить...
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 19:37 27
Koza Nozdri, как раз интересно с самим собой помещать батник. Ты его убиваешь, а он снова появляется
0
Особый статус
Эксперт WindowsВирусоборец
8428 / 1707 / 87
Регистрация: 15.04.2011
Сообщений: 5,515
19.08.2013, 19:39 28
Цитата Сообщение от Borodа Посмотреть сообщение
как раз интересно с самим собой помещать батник. Ты его убиваешь, а он снова появляется
так я о чем и говорю-тока надо не задваивать а затраивать и имя и место дислокации рандомно подбирать из переменной.
+ cals...короче меня не туда понесло...
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
19.08.2013, 19:47 29
Цитата Сообщение от Dragokas Посмотреть сообщение
нельзя считывать исходник из самого себя - такое невозможно, ИМХО (выходит некий рекурсивный текст исходника)
Это про случаи типа
Код
type quine.bat
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 19:50 30
MihaniX, я чет не понимаю... вам уже два варианта кода предложили.
Причем в виде одного файла, который при первом запуске генерит и второй.

Добавлено через 35 секунд
Т.е. это два батника с одинаковым содержимым.
0
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.08.2013, 20:08  [ТС] 31
Boroda, Ваш вариант... запутался я в нем. Вы его запускали?
UPD Разобрался с Вашим - работает, спасибо. Насчет таких команд которые Вы использовали - не знал. Dragokas правильно понял, что у меня проблемы с именами файлов. Я понял почему не получалось - я не копировал, а перезаписывал. Кстати
Dragokas, Что-то у меня не работает...

>PS А что если батники разные?
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 20:24 32
Цитата Сообщение от MihaniX Посмотреть сообщение
Boroda, Ваш вариант... запутался я в нем. Вы его запускали?
Ну как же я мог запостить не проверив.

Цитата Сообщение от MihaniX Посмотреть сообщение
А что если батники разные?
Я это спрашивал в самом начале. Они будут выполнять какой-то код еще, кроме проверки себя любимых на наличие?

Ну и сразу второй вопрос: код должен выполнятся единожды после запуска батника или так же повторяться в цикле?

Хотя в любом случае решение будет в замене команды copy на пачку echo c нужным кодом. Хотя... можно попробовать сделать так, чтобы один батник при запуске вычитывал полностью код второго в переменные.
1
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.08.2013, 20:40  [ТС] 33
Цитата Сообщение от Borodа Посмотреть сообщение
Хотя в любом случае решение будет в замене команды copy на пачку echo c нужным кодом.
Именно ЭТОТ вариант не проходит. Я пробовал. Хотя может у Вас получится?
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 20:57 34
MihaniX, ну тогда значит вычитывать содержимое второго батника в переменные.
1
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.08.2013, 21:03  [ТС] 35
А как это сделать? Серьезно, не только в этой задаче встает такой вопрос.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.08.2013, 21:12 36
Цитата Сообщение от Borodа Посмотреть сообщение
Я это спрашивал в самом начале. Они будут выполнять какой-то код еще, кроме проверки себя любимых на наличие?
Ну и сразу второй вопрос: код должен выполнятся единожды после запуска батника или так же повторяться в цикле?
Вот и я до сих пор не понимаю - какое техзадание. Только экстрасенсов вызывай

Если нужно чтобы в 2-х батниках выполнялись разные коды.
Нужно, чтобы оба этих кода были в обоих батниках.
В зависимости от имени самого себя батник переходит на 1-ю (с одним кодом), или на 2-ю (с другим кодом) метку.
Цитата Сообщение от MihaniX Посмотреть сообщение
Dragokas, Что-то у меня не работает...
У меня работает. Бат-файл Вы правильно обозвали? CMD окошко нельзя закрывать.
Цитата Сообщение от MihaniX Посмотреть сообщение
Я пробовал. Хотя может у Вас получится?
И где код?
Этот что-ли?
Цитата Сообщение от MihaniX Посмотреть сообщение
echo ... >1.bat

Не по теме:


Somebody, Да-да. Но какие другие варианты?
Вот, что имел в виду (пишу очень упрощенно и синтаксически неграмотно):

C++
1
2
3
4
5
6
7
8
int main()
{
  ofstream ofs("file.txt");
  ofs << "int main()\n{\n";
  ofs << ofstream ofs("file.txt")
  ofs << "ofs << "int main()\n{\n";
  ... и тут опять "рекурсивно" пишем текст исходника.
}
Т.е. мы не можем через Echo создать идентичный файл, потому как
в исходный файл входят эти самые эхо с этим же исходным файлов... такая рекурсивная завязка.
(по сути мы не имеем представления об исходнике.)
Вот чего я не могу понять, о чем говорил, что это не возможно.



Добавлено через 3 минуты
Цитата Сообщение от MihaniX Посмотреть сообщение
Именно ЭТОТ вариант не проходит. Я пробовал. Хотя может у Вас получится?
в чем проблема:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
SetLocal
if "%~n0"=="1" (set Friend=2.bat) else (set Friend=1.bat)
 
:: ---- здесь код программы, который выполнится 1 раз.
:: Ведь какую-то задачу Batch должен выполнять, кроме как самовосстанавливаться.
 
:begin
  if not exist "%Friend%" (
    copy "%~f0" "%~dp0%Friend%"
    start "" "%Friend%"
    ping -n 2 127.1 >NUL
  )
goto begin
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 21:14 37
Цитата Сообщение от Dragokas Посмотреть сообщение
в чем проблема
Мне так кажется в том, что исполняемый код будет в обеих батниках одинаковый. А ТС, на сколько я понял, уже хочет разный.
1
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
19.08.2013, 21:17 38
Borodа, не знаю чего хочет ТС, но если сейчас не будет четко сформулирована задача - я закрываю тему за нарушение п. 4.7. Правил.
0
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
19.08.2013, 21:50  [ТС] 39
Будет будет. Надо чтобы были 2 или более батников, которые в независимости от внутреннего (полезного) кода восстанавливали "убитых" собратьев. Проблема в том что код может быть у них разным. Что делать тогда я не знаю. Был вариант записать код другого батника в переменную. Согласен. Но я не знаю как так сделать... Может кто знает?

Добавлено через 52 секунды
Цитата Сообщение от Dragokas Посмотреть сообщение
Т.е. мы не можем через Echo создать идентичный файл, потому как
в исходный файл входят эти самые эхо с этим же исходным файлов... такая рекурсивная завязка.
(по сути мы не имеем представления об исходнике.)
Вот чего я не могу понять, о чем говорил, что это не возможно.
Я именно из-за этого голову и ломал. Хотел через эхи все сделать. про %~n0 не знал. Да и циклические команды еще не очень освоил...
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
19.08.2013, 21:51 40
Цитата Сообщение от MihaniX Посмотреть сообщение
Я именно из-за этого голову и ломал. Хотел через эхи все сделать.
Тогда понятно почему переполнение происходило
1
19.08.2013, 21:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2013, 21:51
Помогаю со студенческими работами здесь

НЕ Самовосстанавливающиеся предохранители ICP-Nxx
Коллеги - не нашел нигде время восстановления таких предохранителей. Или почти мгновенно? И какой...

Самовосстанавливающиеся вирусное приложение fast serch
Ситуация аналогична этой https://www.cyberforum.ru/viruses/thread1887326.html - приложение fast...

Батники для компиляции любой версии Delphi
Если у вас установлено несколько версий Delphi, вы можете использовать мой батник (вернее,...

Троян, прописывает батники в свойства браузеров и открывает рекламу
После умтановки неизвестного приложения подцепил троян, который в путь от запуска браузеров...

Где можно скачать батники для 64-разрядной системы?
скажите пожалуйста:cry: или хотя бы скажите,вообще,как запустить программу с помощью DOSBox?

Выбрать один или несколько CheckBox одновременно и по кнопке запустить определенные батники
есть 5 CheckBox'ов. 1 - запустить 1 батник 2 - запустить 2 батник 3 - запустить 3 батник 4 -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru