Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - bat-скрипт, удаление строк, настоящий рандом

Ответить
Настройки темы
CMD/BAT - bat-скрипт, удаление строк, настоящий рандом

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Друзья, очень прошу вашей помощи в написании скрипта.
Задача такая. В папке, где будет лежать скрипт, находится 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
Благодарности: 8086

Профиль | Отправить PM | Цитировать


«Настоящий рандом» Вы можете получить исключительно внешним фактором — например, подбрасывая монетку и записывая результат. Для машины это всегда будет ряд псевдослучайных чисел. В любом случае, Вам стоит подумать о WSH/PowerShell — пакетные файлы слабо подходят на указанную роль.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:52, 26-06-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - bat-скрипт, удаление строк, настоящий рандом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход