Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 12

Автор: hErAx
Дата сообщения: 25.10.2015 01:53
Задачи на bat-файлах 12
Предыдущие части: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.


Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!! Чтобы не копировались концевые пробелы из форума, жмите на ссылку "Редактировать" в посте, и уже из редактора копируйте батник без пробелов.

Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.

Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы


Дополняем шапку: добавляем готовые решения, полезные ссылки.

Примечание: Большие куски кода заключайте в тэг [no][more][/no]

Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии

[more=Полезные ссылки]

[b]Полезные ссылки:


· Переменные в CMD, команда SET и арифметика
· Пакетные файлы CMD, BAT
· Справочник по параметрам командной строки
· Cmd. Описание от разработчиков (англ.) (рус.)
· Урок bat-аники (для начинающих)
· Командная строка и сценарии Windows - уроки
· Библиотека функций для командных файлов
· Использование ansi.sys
· Справка по командам в виде Html
· Команды RunDll32
· Пример - получение и обработка списка пользователей
· Пример перехода из 32-битной версии cmd.exe в 64-битную
[/more][/b]


[more=Полезные утилиты]
[b]Полезные утилиты:


· Утилтиа-модуль (VBS-скрипт) для Internet Explorer - Позволяет копировать выделенный текст без пробелов на конце. Особенно полезно на руборде

· base64 - кодирует/раскодирует файл в/из base64
· blat - отправка почты из консоли
· CLCC - консольный калькулятор
· cmdow - изменение параметров и видимости дос-окна
· cnic - включает/выключает сетевой интерфейс
· crc32 - утилита для подсчета контрольных сумм (только CRC)
· curl - передача и прием файлов, используя URL синтаксис
· curtime - утилита для обработки времени в скриптах
· delbyown - поиск файлов, созданных определенным пользователем, на NTFS разделе
· devcon - включение, выключение, удаление и т.д. устройств из Диспетчера Устройств
· dirdate - изменение даты создания/модификации/последнего доступа файлов
· directify - группирование файлов по общим параметрам
· editpath - добавляет или удаляет директории в переменной PATH
· fastsum - подсчет контрольных сумм (только MD5)
· fciv - подсчет контрольных сумм (MD5 и SHA-1)
· fdf - Fast Duplicate Finder, находит одинаковые по содержанию файлы
· fsum - подсчет контрольных сумм (12 различных алгоритмов)
· gsar - General Search and Replace, поиск и замена текста в файле
· hex - вывод бинарного файла в шестнадцатиричном формате
· hstart - скрытый запуск командных файлов и консольных программ
· mediainfo - утилита для просмотра метаданных мультимедийных файлов, консоль и фронтенд
· mirror - копирование, создание точной копии всей структуры директорий
· msgbox - вывод сообщения в диалоговом окне
· msgbox (другая) - еще одна утилита для вывода сообщения в диалогоовм окне
· mtee - выводит входящие данные на экран и в файл (одновременно)
· netcat - мощная утилита для передачи данных по TCP/UDP соединениям
· nircmd - универсальная утилита на все (почти) случаи жизни
· outwit - пакет из 6-ти полезных GNU Win32 утилит
· portqry - проверка статуса TCP и UDP портов на удаленных машинах
· PsTools - отличный набор утилит для администрирования
· ptime - определяет время работы программ (точность до 5 миллисек.)
· Quick Batch File Compiler - позволяет превратить ваш батник в независимое приложение
· regperm - изменение прав доступа к веткам/ключам реестра
· rmtshare - управление шарами
· rplstr - замена строки текста в файле из командной строки
· scrnres - screen resolution. Выводит разрешение экрана в консоль
· sed - мощный текстовый фильтр/процессор с поддержкой регулярных выражений
· setacl - изменение прав доступа к объектам
· setenv - утилита для работы с системными переменными
· smtpsend - отправка сообщений на электронную почту
· Streams - утилита для работы с альтернативными потоками NTFS
· trayconizer - позволяет сворачивать окно программы в трей
· tst - скриптовая утилита для автоматизации telnet-сессий
· uniqline - утилита фильтрующая одинаковые строчки в тексте, умеет удалять пустые строчки и пробелы в начале и конце строк
· UnxUtils - набор GNU утилит для Win32
· wget - консольная утилита для скачивания файлов по HTTP, HTTPS и FTP протоколам
· wgetx64 - консольная утилита для скачивания файлов по HTTP, HTTPS и FTP протоколам
· Win2000 Resource Kit Tools
· Win2003 Resource Kit Tools
· xcodewin - перекодировщик русского текста, поддерживает 14 кодировок
· Пакет утилит для организации интерфейса в bat-файлах
· BAT Enchancer
[/more][/b]


Готовые решения и частые вопросы:
Встроенный справочник по командам
Создание помощи по всем командам консоли 2000 и XP
Делаем паузу в командном файле стандартными средствами Windows
[more=Альтернативные решения »]

Альтернативные решения


· Альтернатива команде ECHO - позволяет выводить текст в файл без перевода строки.
· Установка задержки (паузы) в батнике
· Установка задержки (паузы) в батнике (используя VBScript)
· Конвертирование файлов (*.com *.exe *.*) в код батника
· Переход из 32-битной версии cmd.exe в 64-битную
[/more]
[more=Работа с текстом, датой, и файлами »]

Работа с текстом, датой и файлами


· Создание листинга директорий на примере создания плейлиста
· Переименовывание файлов по дате модификации
· Использование даты на день раньше чем сегодня
· Использование даты на день раньше чем сегодня (учитываются високосные годы)
· Использование даты на день раньше чем сегодня (используя VBScript)
· Использование разницы между датой создания файла(папки) и текущей, в днях или минутах(используя VBScript)
· Конвертирование текста из кириллицы в латиницу
· Проверка существования файла и присвоение ему нового имени в случае если такой файл уже существует
· Замена текста в файле (sbs2.com)
· Удаление всего содержимого каталога, включая подкаталоги, командой rd (не удаляя сам каталог)
· Удаление файлов в указаном каталоге включая подкаталоги, с ведением лога удаления (удалён/не удалён)
· Удаление файлов во всех под/каталогах, имя которых (каталога) содержит определённое значение (Temp к примеру)
· Чтение из файлов содержащих ключи и значения (подобно структуре .ini файлов)
· Получение системного времени в одном формате (вне зависимости от настроек даты и времени системы)
· Простой способ получать текущую дату всегда в одном формате (не зависит от языков и настроек) и ещё вариант
· Разбиение целого числа байтов (размера файла) на тысячные значения
[/more]
[more=Администрирование, автоматизация и сеть »]

Администрирование, автоматизация и сеть


· Запуск сетевого подключения
· Пример выполнения команд по результату команды ping
· Запуск bat файлов как сервис
· SBS - Sleep before shutdown - Утилита для выключеня и перезапуска компьютера через заданное время
· Перезапуск эксплорера с восстановлением открытых директорий
· Download And Extract - батник-гибрид для закачки архивов и моментальной их распаковки в папку с именем самого архива
[/more]
[more=Работа с переменными и параметрами ком. строки »]

Работа с переменными и параметрами ком. строки


· Разименовывание переменных
· Создание (запись) переменных окружения в реестр
· Способ передачи в бат-файл параметра содержащего символы & и последующей обработки полученного значения
[/more]

Описания работы команд и символов участниками темы:
· setlocal enabledelayedexpansion и переменные окружения
· символы & и && в командной строке
· Переменная %0
Автор: nick7inc
Дата сообщения: 03.11.2015 11:06
Задачи на bat-файлах 11 пропала.
Автор: bomzzz
Дата сообщения: 03.11.2015 14:05
пропала она видать не с проста.

вопрос такой. у беспроводной сети, созданной сетевым адаптером, из за ошибки драйверов скорее всего, падает уровень сигнала практически до нуля. остается только перезапуск.
во первых так и не смог найти правильный синтаксис команды netsh для перезапуска сетевого соединения. devcon работает, но с ним переключается сетевой канал. как сделать, чтоб проверить состояние сети - уровень сигнала, есть ли присоединенные клиенты и в случае если он низкий и клиенты отсутствуют его перезапустить
Автор: taborzykh
Дата сообщения: 05.11.2015 19:16
Ребята назрел такой вопросец! Имеется некое количество файлов формата XML в которых надобно заменить пару конкретных значений. все эти файлы по разному называются но лежат в одной папке! Можно ли как то написать такой код чтобы автоматически сканировала эти xml файлы и исправляла нужные строки?
Автор: ipmanyak
Дата сообщения: 09.11.2015 11:19
taborzykh можно
http://forum.ru-board.com/topic.cgi?forum=2&topic=2922&start=16&limit=1
Автор: alexagf
Дата сообщения: 09.11.2015 12:57
Задача: дождаться появления процесса AAA.exe и после его завершения запустить процесс BBB.exe.
Как?
Автор: bomzzz
Дата сообщения: 09.11.2015 13:38
да никак. пока батник будет тупить процесс может начаться и кончится десять раз

Добавлено:
проще процесс ААА батником и запускать
Автор: alexagf
Дата сообщения: 09.11.2015 14:30
Нет, процесс AAA запускается автоматически и отрабатывает гарантированно 1 раз.
Автор: YuS_2
Дата сообщения: 09.11.2015 14:45
alexagf
Вам правильно сказали, что весь вопрос в том, сколько времени будет работать процесс AAA...
Можно, конечно, запустить батник резидентом с постоянным циклом до обнаружения процесса, но гарантии нет никакой, что процесс не будет запущен и завершен в процессе отсчета времени до начала сканирования всех процессов.
Автор: alexagf
Дата сообщения: 09.11.2015 15:22
Хорошо, вернее плохо
Дело в том, что я батником запускаю процесс ХХХ, когда он отрабатывает, автоматически запускается процесс AAA (на это я повлиять не могу). И вот после его закрытия мне нужно запустить процесс ВВВ.
Никак не решить? AutoIT не поможет?
Автор: bomzzz
Дата сообщения: 09.11.2015 15:32
сам придумай как не дать остановится процессу до некоей проверки

Добавлено:
замени файл AAA.exe на другой который запускает настоящий
Автор: alexagf
Дата сообщения: 09.11.2015 15:44

Цитата:
замени файл AAA.exe на другой

Это невозможно.
Автор: Alex_Piggy
Дата сообщения: 09.11.2015 17:05
доброе время.
Возможно поймать запуск ААА через VBS ExecNotificationQuery. TargetInstance вроде CIM_Process.
Завтра буду возле компа - напишу/проверю.
test.vbs

Код:
Set objWMIService = GetObject("winmgmts:")
Set oWshShell = CreateObject("WScript.Shell")
Set colMonitoredProcesses = objWMIService.ExecNotificationQuery("select * from __instancedeletionevent within 5 where TargetInstance isa 'Win32_Process'")
Do
With colMonitoredProcesses.NextEvent
If (LCase(.TargetInstance.Name) = LCase("AAA.EXE")) Then
MsgBox .TargetInstance.Name & " закрыт."
oWshShell.Run "BBB.exe"
Exit Do
End If
End With
Loop
Автор: nik4z
Дата сообщения: 09.11.2015 21:22
alexagf

Цитата:
AutoIT не поможет?

Думаю, поможет, примерно так


Код: Run('XXX')
WinWait('AAA')
WinWaitClose('AAA')
Run('ВВВ')
Автор: bomzzz
Дата сообщения: 09.11.2015 22:29
перехватчик поможет
Автор: alexagf
Дата сообщения: 10.11.2015 05:26
nik4z
Спасибо! Попробую.
Автор: nik4z
Дата сообщения: 10.11.2015 14:49
alexagf
Обновил сообщение.
Автор: Taran2ul
Дата сообщения: 11.11.2015 19:20
Люди. Помогите пожалуйста оптимизировать код:

Код: goto checker
:check
cls
echo Programm: %Prog%
echo Memory: %Mem%
echo Wait...
:checker
@for /f "tokens=1,5 delims= " %%i in ('tasklist /FI "IMAGENAME eq progr1.exe" /NH') do @set Mem=%%j && @set Prog=%%i && @goto check
@for /f "tokens=1,5 delims= " %%i in ('tasklist /FI "IMAGENAME eq progr2.exe" /NH') do @set Mem=%%j && @set Prog=%%i && @goto check
@for /f "tokens=1,5 delims= " %%i in ('tasklist /FI "IMAGENAME eq progr3.exe" /NH') do @set Mem=%%j && @set Prog=%%i && @goto check
Автор: YuS_2
Дата сообщения: 12.11.2015 04:58
Taran2ul
тогда уж, хотя бы так:

Код: @goto checker
:checker
@for /f "tokens=1,5" %%i in ('tasklist /NH^|findstr /i /r "progr[1-3]"') do @set Mem=%%j && @set Prog=%%i &&@call :check
@pause
@goto EOF

:check
@echo Programm: %Prog%
@echo Memory: %Mem%
@echo Wait...
@exit /b
Автор: Taran2ul
Дата сообщения: 12.11.2015 08:39
YuS_2
Все дело в том, что (моя вина, сразу не указал) progr1.exe ... progrN.exe - это для примера.
Там разные имена программ. К примеру explorer.exe, svchost.exe, ..., csrss.exe. Поэтому в регулярном выражении нужно их перечислить все (как я понимаю), но

Код: ...findstr /i /r "explorer.exe|svchost.exe"...
Автор: nik4z
Дата сообщения: 12.11.2015 08:56
Taran2ul


Код: call checker progr1.exe progr2.exe progr3.exe
goto :eof

:checker
if "%1"=="" goto :eof
@for /f "tokens=1,5 delims= " %%i in ('tasklist /FI "IMAGENAME eq %1" /NH') do @set Mem=%%j && @set Prog=%%i
echo Programm: %Prog%
echo Memory: %Mem%
echo Wait...
pause
shift
goto checker
Автор: YuS_2
Дата сообщения: 12.11.2015 10:00
Taran2ul

Цитата:
Работает с &&

Вот, уже и разобрались, что у микрософта в консоли регэкспы весьма своеобразные

Кстати, чтобы выбор фильтруемых процессов был полегче, можно вынести шаблон в переменную, как-то так:

Код: @set fltr="progr1 && 2rgorp && progr3"
... ('tasklist /NH^|findstr /i /r %fltr%') ...
Автор: bomzzz
Дата сообщения: 12.11.2015 13:34
оказывается под хп не поддерживаются некоторые команды широко распространенные в интернете, так что пришлось делать через devcon

Цитата:
@echo off
devcon disable "PCI\VEN_1814&DEV_3060"
ping -n 6 127.0.0.1>nul
devcon enable "PCI\VEN_1814&DEV_3060"
pause
Автор: popugai
Дата сообщения: 17.11.2015 10:52
Добрый день. Подскажите как исключить из архивирования файлы с расширением .cdx? Архивируются 3 папки и из одной из них нужно исключить файлы с расширением .cdx Какую команду дописать?
Автор: YuS_2
Дата сообщения: 17.11.2015 12:14
popugai

Цитата:
Какую команду дописать?

Зависит от используемого архиватора...
Автор: AntoshAReal
Дата сообщения: 17.11.2015 13:03
Приветствую!
Прошу подсказать как сделать такое условие:
если имя компа равно тому, что в файле, то выполнить файл, если не равно, то выполнить другой файл.

Сделал вот так, но выполняется только первое условие.

Код:
set netlogon=%logonserver%\netlogon

for /F %%t in ('type "%netlogon%\Server.txt"') do (
if /I "%%t"=="%Computername%" call "%netlogon%\server.cmd" else call "%netlogon%\user_pc.cmd"
)
Автор: popugai
Дата сообщения: 17.11.2015 14:29

Цитата:
Зависит от используемого архиватора...

7-Zip
Автор: nik4z
Дата сообщения: 17.11.2015 14:41
popugai

Цитата:
7-Zip


Код: -x!*.cdx
Автор: VitaminP
Дата сообщения: 17.11.2015 14:47
popugai
Архивацию придется делать в 2 этапа (2 команды). Сначала создаём архив с двумя папками, в которых не нужно исключать файлы. Затем добавляем к этому архиву папку в которой нужно исключать файлы и добавляем ключ "-x!*.cdx".
Вот пример из справки по этому ключу: 7z a -tzip archive.zip *.txt -x!temp.*
Автор: popugai
Дата сообщения: 18.11.2015 09:22
Спасибо всем за помощь. Без разбивки на два архива можно сделать и как? или сложно?

Страницы: 123456789101112131415161718

Предыдущая тема: Не устанавливаются обои на рабочий стол (Windows 2003 x64)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.