Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
BlaBlaName
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 2
1

.bat обработка команд на пк из списка в файле

14.01.2020, 18:07. Просмотров 910. Ответов 2

Всем привет, я в bat новичок, помогите заставить это работать. Не могу разобраться. Батник должен брать список компов из файла pclist.txt, и с каждого компа вытащить последнюю запись из журнала событий. В файл pclistresult.txt вывести результат.

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@echo off
 
:: Меняем кодировку на UTF-8
chcp 65001 2>nul 1>&2
 
:: Переходим в папку батника
cd /D %~dp0
 
:: Будем использовать 2 файла:
:: pclist.txt - файл со списком компьютеров
:: pcresult.txt - файл с результатом
 
    ::Обрабатываем список с компьютерами
    for /f "tokens=1 " %%i in (pclist.txt) do (
        :: Устанавливаем в качестве переменной имя из списка
        set target=%%i
        :: Получаем последнюю запись из журнала событий удаленного пк
        for /f "tokens=2 delims= " %%A in ('wevtutil query-events /r:%target% Application /count:1 /rd:true /format:text /q:"Event[System[(EventID=9)]]" ^| find "Date"') do set ChDate=%%A
        :: Заменяем букву Т из реультата пробелом
        set ChDate=%ChDate:T= %
        :: Удаляем лишние цифры в конце
        set ChDate=%ChDate:~0,-7%
        :: Выводим результат
        if "%ChDate%"=="" (
            echo %%I - записей об изменении пароля не найдено >> %~dp0pclistresult.txt
        ) else (
            echo %%I - пароль был изменен: %ChDate% >> %~dp0pclistresult.txt
        )
    )
pause
exit
Не срабатывает эта строка:

Windows Batch file
17
18
:: Получаем последнюю запись из журнала событий удаленного пк
for /f "tokens=2 delims= " %%A in ('wevtutil query-events /r:%target% Application /count:1 /rd:true /format:text /q:"Event[System[(EventID=9)]]" ^| find "Date"') do set ChDate=%%A
Добавлено через 37 минут
P.S. из командной строки команда срабатывает корректно.

Windows Batch file
1
wevtutil query-events /r:PC-001 Application /count:1 /rd:true /format:text /q:"Event[System[(EventID=9)]]" | find "Date"
P.P.S. В строках 25 и 27 уже исправил %%I на %%i
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2020, 18:07
Ответы с готовыми решениями:

Список команд в bat-файле
Имеется bat файл batch.bat, принимающий аргументы как-то так: batch.bat file.f И имеется другой...

Выполнение двух команд в BAT-файле
Доброго времени суток, уважаемые форумчане! Столкнулся на работе с тем, что каждый раз...

Последовательное выполнение всех команд в bat-файле
Всем привет, ребят, помогите пожалуйста с проблемкой, в бат файле выполняются не все команды, а...

Запись команд из одного bat-файла в другой bat-файл
Предположил что: в 1 bat: echo echo my_text >> my_file >> new.bat и хотел что бы получилось так...

Вызов одного bat в другом bat файле несколько раз
Доброго времени суток. Подскажите: есть два бат-файла, установлена система radius, приходят архивы....

2
b0gus
566 / 206 / 89
Регистрация: 17.03.2014
Сообщений: 561
14.01.2020, 18:49 2
Лучший ответ Сообщение было отмечено BlaBlaName как решение

Решение

Цитата Сообщение от BlaBlaName Посмотреть сообщение
В строках 25 и 27 уже исправил %%I на %%i
это хорошо )
теперь надо добавить EnableDelayedExpansion и переписать код так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@echo off
SetLocal EnableDelayedExpansion
:: Меняем кодировку на UTF-8
chcp 65001 2>nul 1>&2
 
:: Переходим в папку батника
cd /D %~dp0
 
:: Будем использовать 2 файла:
:: pclist.txt - файл со списком компьютеров
:: pcresult.txt - файл с результатом
 
    ::Обрабатываем список с компьютерами
    for /f "tokens=1 " %%i in (pclist.txt) do (
        :: Устанавливаем в качестве переменной имя из списка
        set "target=%%i"
        :: Получаем последнюю запись из журнала событий удаленного пк
        for /f "tokens=2 delims= " %%A in ('wevtutil query-events /r:!target! Application /count:1 /rd:true /format:text /q:"Event[System[(EventID=9)]]" ^| find "Date"') do set "ChDate=%%A"
        :: Заменяем букву Т из реультата пробелом
        set "ChDate=!ChDate:T= !"
        :: Удаляем лишние цифры в конце
        set "ChDate=!ChDate:~0,-7!"
        :: Выводим результат
        if "!ChDate!"=="" (
            echo %%i - записей об изменении пароля не найдено >> %~dp0pclistresult.txt
        ) else (
            echo %%i - пароль был изменен: !ChDate! >> %~dp0pclistresult.txt
        )
    )
pause
exit
1
BlaBlaName
0 / 0 / 0
Регистрация: 14.01.2020
Сообщений: 2
14.01.2020, 19:42  [ТС] 3
Ура, работает. Огромное спасибо за помощь!
Полученные знания возьму на вооружение
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2020, 19:42

Можно ли получить имя bat-файла в этом же bat-файле?
Запускаю прогу со входными аргументами из батника. Последний аргумент - имя выходного файла. Хочу...

Как вызвать в одном bat-файле другой bat-файл?
Здравствуйте, уважаемые форумчане. Подскажите, пожалуйста, каким образом надо прописать в одном...

Как экранировать кавычки в bat файле или же создать .bat для создания ярлыков?
Нужно размножить ярлыки с разными параметрами запуска(профиля для chrome) у меня не получается...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.