|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - bat-скрипт, удаление строк, настоящий рандом |
|
CMD/BAT - bat-скрипт, удаление строк, настоящий рандом
|
Новый участник Сообщения: 1 |
Друзья, очень прошу вашей помощи в написании скрипта.
Задача такая. В папке, где будет лежать скрипт, находится 2 файла 1.config.txt 2. config.txt.bak Файлы текстовые, содержать конфиг для работы майнера(xmr-stak-cpu), но это не суть важно. В фоне будет запущен процесс с именем xmr.exe. Скрипт должен работать в фоновом режиме на постоянку, планирую запустить его службой. Коротко, алгоритм работы скрипта таковой: Пока (true) выполнять: 1. Удалить из файла config.txt случайное количество строк(от 1-5) начиная со строки № 2. Убить процесс xmr.exe 3. Подождать случайное количество времени(от 5 до 15 минут) 4. Скопировать файл config.txt.bak на место файла config.txt 5. Убить процесс xmr.exe (таким образом перезапускается майнер и подхватывает новый конфиг, майнер работает службой) 6. Подождать случайное количество времени(от 20 до 40 минут) Конец ПОКА Проблемы с которыми я столкнулся, это в первую очередь генерация случайного числа через переменную %random%, число псевдо случайное и зависит от какой-то постоянной величины из внутренней среды виндовс. Так как скрипт будет работать на 20+ машинах одновременно нужна случайность на каждой отдельной машине. Дальше, я совсем не представляю каким образом можно удалить строки из файла config.txt. Номер строки заранее известен. |
|
Отправлено: 02:16, 26-06-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать «Настоящий рандом» Вы можете получить исключительно внешним фактором — например, подбрасывая монетку и записывая результат. Для машины это всегда будет ряд псевдослучайных чисел. В любом случае, Вам стоит подумать о WSH/PowerShell — пакетные файлы слабо подходят на указанную роль.
|
Отправлено: 02:52, 26-06-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать FeranD,
Вот vbs-скрипт по Вашей постановке
File1 = "config.txt" File2 = "config.txt.bak" ProcName = "xmr.exe" Wait1_1 = 5 ' время в мин. Wait1_2 = 15 Wait2_1 = 20 Wait2_2 = 40 NBegin = 10 ' Начиная со строки NDel1 = 1 ' Удалить случайное число строк в диапазоне NDel2 = 5 Set FSO = CreateObject("Scripting.FileSystemObject") Randomize ScrName = WScript.ScriptFullName ScrPath = FSO.GetParentFolderName(ScrName) If Right(ScrPath, 1) <> "\" Then ScrPath = ScrPath + "\" Do On Error Resume Next Set NFile = FSO.OpenTextFile(ScrPath + File2, 1, False) ' Открываем текстовый файл If Err.Number <> 0 Then MsgBox ScrPath + File2 + vbCrLf + vbCrLf + Err.Description Exit Do End If S = NFile.ReadAll NFile.Close On Error GoTo 0 Mas = Split(S, vbCrLf) NU = UBound(Mas) NL = LBound(Mas) NDel = Int((NDel2 - NDel1 + 1) * Rnd() + NDel1) On Error Resume Next Set NFile = FSO.OpenTextFile(ScrPath + File1, 2, True) ' Открываем текстовый файл If Err.Number <> 0 Then MsgBox ScrPath + File1 + vbCrLf + vbCrLf + Err.Description Exit Do End If j = 0 For i = NL To NU If i >= NBegin + NL - 1 And j < NDel Then j = j + 1 Else NFile.WriteLine (Mas(i)) End If Next NFile.Close On Error GoTo 0 If TermWait(ProcName, Rnd(), Wait1_1, Wait1_2) <> -1 Then Exit Do On Error Resume Next LL = FSO.CopyFile(ScrPath + File2, ScrPath + File1, True) If Err.Number <> 0 Then MsgBox Err.Description Exit Do End If On Error GoTo 0 If TermWait(ProcName, Rnd(), Wait2_1, Wait2_2) <> -1 Then Exit Do Loop Function TermWait(Proc, TRnd, W1, W2) LL = -1 Set WMI = GetObject("winMgmts:") SQuery = "Select *From Win32_Process Where Name=" + """" + Proc + """" Set Processes = WMI.ExecQuery(SQuery) If Processes.Count <> 0 Then On Error Resume Next For Each Process In Processes Process.Terminate Next On Error GoTo 0 End If TWait = Int(((W2 - W1) * 60 + 1) * TRnd + W1 * 60) ' Set WShell = CreateObject("WScript.Shell") ' LL = WShell.Popup("Ждем " + CStr(Int(TWait)) + " сек" + vbCrLf + vbCrLf + """OK"" - завершить скрипт", TWait, CStr(Time()), 48) WScript.Sleep (TWait * 1000) TermWait = LL End Function |
------- Отправлено: 22:08, 02-07-2017 | #3 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Можно ли этот (.vbs) скрипт интегрировать в (.bat) скрипт? | ufooo000 | Скриптовые языки администрирования Windows | 6 | 01-01-2017 10:23 | |
CMD/BAT - [решено] Удаление пустых строк, пробелов и/или конца строк | blackeangel | Скриптовые языки администрирования Windows | 12 | 11-03-2016 21:49 | |
CMD/BAT - удаление строк | drone4888 | Скриптовые языки администрирования Windows | 2 | 09-08-2014 19:01 | |
CMD/BAT - [решено] BAT - Удаление строк(-и) | Ragnazar | Скриптовые языки администрирования Windows | 1 | 21-02-2013 14:37 | |
CMD/BAT - Поиск слова в тексте, удаление строки, удаление 8 строк выше и 3 строк ниже | Alk-13 | Скриптовые языки администрирования Windows | 0 | 10-02-2012 18:06 |
|