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

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

Автор: vu1tur
Дата сообщения: 04.11.2008 22:07
Задачи на bat-файлах 6
(часть 1, часть 2, часть 3, часть 4, часть 5)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.


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

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

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


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

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

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

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

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


· Cmd. Описание от разработчиков (англ.) (рус.)
· Урок bat-аники (для начинающих)
· Командная строка и сценарии Windows - уроки
· Библиотека функций для командных файлов
· Использование ansi.sys
· Справка по командам в виде Html
· Команды RunDll32
· Пример - получение и обработка списка пользователей
[/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 - управление шарами
· scrnres - screen resolution. Выводит разрешение экрана в консоль
· sed - мощный текстовый фильтр/процессор с поддержкой регулярных выражений
· setacl - изменение прав доступа к объектам
· setenv - утилита для работы с системными переменными
· smtpsend - отправка сообщений на электронную почту
· Streams - утилита для работы с альтернативными потоками NTFS
· trayconizer - позволяет сворачивать окно программы в трей
· tst - скриптовая утилита для автоматизации telnet-сессий
· uniqline - утилита фильтрующая одинаковые строчки в тексте, умеет удалять пустые строчки и пробелы в начале и конце строк
· UnxUtils - набор GNU утилит для Win32
· wget - консольная утилита для скачивания файлов по HTTP, HTTPS и FTP протоколам
· Win2000 Resource Kit Tools
· Win2003 Resource Kit Tools
· xcodewin - перекодировщик русского текста, поддерживает 14 кодировок
· Пакет утилит для организации интерфейса в bat-файлах
[/more][/b]


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

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


· Альтернатива команде ECHO - позволяет выводить текст в файл без перевода строки.
· Установка задержки (паузы) в батнике
· Установка задержки (паузы) в батнике (используя VBScript)
· Конвертирование файлов (*.com *.exe *.*) в код батника
[/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
Автор: isk rus
Дата сообщения: 05.11.2008 04:22
Добро времени!
Задача: вывод системного сообщения (Casker=MsgBox("...",48,"..."))*.VBS через заданный промежуток времени (2 месяц).
Как правильно организовать батник, добавляющий в менеджер расписаний задачу о выполнении заранее скопированного файла *.VBS и запуске его через заданный промежуток времени?
Автор: mouser
Дата сообщения: 05.11.2008 13:00
Добрый день.
Помог мне код по отниманию дней с учётом высокостного года "http://forum.ru-board.com/topic.cgi?forum=62&bm=1&topic=9040&start=647&limit=1"

Вопрос: как организовать добавление ???
Автор: sanprocenko
Дата сообщения: 05.11.2008 15:07
Доброго времени суток.
Нужно выполнить команду на удаление записи в реестре в определенное время.
Заранее спасибо.
Автор: KapralBel
Дата сообщения: 05.11.2008 17:22
sanprocenko
reg delete /?
и любой планировщик, хоть встроенный в систему
Автор: Froz
Дата сообщения: 05.11.2008 17:40
sanprocenko,

Удаляем ветку реестра в 00:36

at 00:36 reg delete HKLM\Software\MyPrg /f
Автор: sanprocenko
Дата сообщения: 05.11.2008 18:33
Все супер, но если мне надо, чтобы она удалилась через 3 месяца???
Очень нужно, помогите пожалуйста.
Как вариант, можно создать проверку даты. Допустим, если сегодня 12.12.08, тогда удалить ветку в реестре. Батник кинуть в атозагрузку.
Как именно написать не знаю, помогите....
Автор: Elroir
Дата сообщения: 06.11.2008 00:00
sanprocenko
Посмотри команду schtasks
Автор: MGrom
Дата сообщения: 06.11.2008 13:46
Добрый день

Хочу написать батник, который будет в искать в папке файлы с определёнными словами и при нахождение, копировать файлы в другую папку. (нужно чтобы find искал только в файлах за последний день)

Как связать найденное find’ом и отправить результат команде copy?

Обычным (|) не обойтись.

Я подозреваю что нужно использовать For .

Помогите разобраться
Автор: Elroir
Дата сообщения: 06.11.2008 15:04
MGrom
Задай вопрос конкретнее - приведи пример того, что тебе надо сделать
Автор: stydik
Дата сообщения: 06.11.2008 15:13
Нужно на машины в сети вывести ярлыки, т.к. с батником у меня не получилось решил создать скрипт

// Option Explicit
Dim oShell, oShortCut, sDeskTopPath
Set oShell = CreateObject("Wscript.Shell")
sDeskTopPath = oShell.SpecialFolders("AllUsersDesktop")
Set oShortCut = oShell.CreateShortcut(sDeskTopPath & "\123.lnk")
oShortCut.TargetPath = "v:\1\1.bat"
oShortCut.Save //

Он добавляет с сетевого диска V ярлык мне на рабочий стол. А как бы это сделать с машинами в сети (чтоб ярлыки добавились) ???????
Автор: mouser
Дата сообщения: 06.11.2008 18:14
а мне кто нибудь поможет ????
Автор: Elroir
Дата сообщения: 06.11.2008 18:48
mouser
Тот код надо полностью переделывать под добавление.
Проще воспользоваться этим решением - http://forum.ru-board.com/topic.cgi?forum=62&topic=9040&start=760#17
Автор: timsky
Дата сообщения: 06.11.2008 19:15
Всем привет. Послали меня сюда к вам, как одним из сильнейших в моей проблеме.
Говорят, что здесь сильные перцы водятся

Конфигурация проблемы:

1) Есть комп, на нем Windows Server 2003 Ent EN SP2 x86. Он работает в качестве обычного компа, нет ни IIS, ни БД, ничего. Включен звук, стоят дрова для видяхи... как домашний комп вобщем. Но ничего лишенго вроде игр, постороннего софта на нем не запускаем, только нужное.
На нем работает одна стороняя служба, которая при определенных условиях запускает мою прогу № 1:

2) Прога № 1 является лаунчером для другой моей проги № 2. Она запускает ее от имени Администратора, т.к. она должна работать не под учеткой SYSTEM, а под любым другим нормальным юзером/админом.

2-ю прогу описывать смысла нет, т.к. она не является причиной проблемы.

Проблема такая:

Служба запускает мою прогу № 1, которая стартит прогу № 2, но только 32 раза! На 33 раз прога № 1 обламывается. Т.е. процесс, работающий под учеткой SYSTEM может запустить другую аппликуху под другой учеткой не более 32 раз

Проверил так: накатал прогу, которая каждую минуту запускает такой батник:
at {ЧАС}:{МИН} /interactive C:\test\Log.exe
... т.е. в шедулер добавляется задание, которое исполняется с правами SYSTEM.

Log.exe - это прога № 1, которая в случае успешного запуска проги № 2 пишет лог, если не успешный запуск, то она каждую секунду пытается это сделать... безуспешно.

Если сделать logoff/logon или ребутнуть комп, то все снова работает, но не более 32 раз ((
В чем проблема, где ковырять? Уже все, что можно было в политках наковырял.

Добавлено:
Как только начинается глюк пробовал сделать это ручками:
Зашедулил запуск CMD.exe, чтобы он был у меня с правами SYSTEM и в нем пробовал юзать стандартную runas.exe:


Цитата:
runas /noprofile /user:server\administrator "c:\test\Log.exe 123"


Получаю следующую ошибку:

Цитата:
RUNAS ERROR: Unable to run - c:\test\Log.exe 123
5: Access is denied.


Причем, если запускать аппликухой (моей прогой или CMD.exe), работающей под Администратором, то все срабатывает.
Автор: stydik
Дата сообщения: 06.11.2008 20:01
Есть скриптик


Код: psexec -d -s -i \\mycomp wscript.exe V:\1\1.vbs
Автор: mouser
Дата сообщения: 07.11.2008 09:06
Elroir
дык ... а как его в другой формат сконвертировать
выдает DD.MM.YYYY
а надо YYYYMMDD
Автор: Collapse Troll
Дата сообщения: 07.11.2008 11:10
Здравствуйте!

Помогите пожалуйста с таким вопросом:

формирую название файла по дате и по времени. Как получать дату, независимо от региональных настроек взял в этой же ветке. вот, если кому пригодится:


Код: rem получение системной даты в универсальном формате, независимо от региональных настроек
echo.>"%TEMP%\~.ddf"
makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf">nul
for /f "tokens=4,5,7" %%a in ('type "%TEMP%\~.rpt"') do if not defined _current-date set "_current-date=%%c-%%a-%%b"
echo Date is %_current-date%...
del /q "%TEMP%\~.*"
Автор: MGrom
Дата сообщения: 07.11.2008 11:32

Цитата:

MGrom
Задай вопрос конкретнее - приведи пример того, что тебе надо сделать



Мне нужно, чтобы батник искал в определённой папке файлы который содержат слово (например, Привет). После того как пройдёт поиск, все файлы содержащие это слово должны скопироваться в отдельную директорию.

Передать с команды find на команду copy с помощью | не получается.
т.к. на выходе финд даёт имена файлов вместе со строками или ещё какими-нибудь параметрами, что copy не понимает.

Может кто сталкивался с похожей задачкой?
Автор: Froz
Дата сообщения: 07.11.2008 12:16
Collapse Troll

Добавляем лидирующий ноль если час меньше 10
if %time:~0,2% lss 10 set time=0%time:~0,2%
Автор: Collapse Troll
Дата сообщения: 07.11.2008 12:29
Froz
Спасибо, распект!
Автор: stydik
Дата сообщения: 07.11.2008 12:43
Отвечаю сам себе. Кстати, может кому нибудь пригодится. Есть утилита RemoteScript (всего 200 кило), она позволяет выполнять батники, cmd, vbs на других машинах. Мне помогла. Классная штучка.!!!!!!!!!
Автор: MGrom
Дата сообщения: 07.11.2008 13:33

Цитата:

Цитата:
MGrom
Задай вопрос конкретнее - приведи пример того, что тебе надо сделать




Мне нужно, чтобы батник искал в определённой папке файлы который содержат слово (например, Привет). После того как пройдёт поиск, все файлы содержащие это слово должны скопироваться в отдельную директорию.

Передать с команды find на команду copy с помощью | не получается.
т.к. на выходе финд даёт имена файлов вместе со строками или ещё какими-нибудь параметрами, что copy не понимает.

Может кто сталкивался с похожей задачкой?


Ура , кое что нашол ))

FOR %A IN (*.TXT) DO (TYPE "%A" | FIND /I "Привет" > NUL && copy %A d:\111\)

Ищет в txt файлы содержащие "Привет" , если находит копирует в d:\111\

Осталось ещё немного , нужно чтобы он искал в файлах созданых за последний день ... Может кто знает ?

Автор: Elroir
Дата сообщения: 07.11.2008 13:37
mouser

Цитата:
а как его в другой формат сконвертировать

Вместо первой строчки в скрипте используй такую:

Код:
echo wscript.echo year(date-1) ^& month(date-1) ^& day(date-1)>tmp.vbs
Автор: king_stiven
Дата сообщения: 07.11.2008 13:49
MGrom
Уж сколько этих примеров в старых частях есть

Код: for /f "tokens=*" %%i in ('dir /b /s ^| findstr "privet"') do echo %%i
Автор: Elroir
Дата сообщения: 07.11.2008 13:53
MGrom

Цитата:
нужно чтобы он искал в файлах созданых за последний день

Используй утилиту forfiles вместо команды for.
Автор: stydik
Дата сообщения: 07.11.2008 16:05
Ребята, нужен скрипт. Помогите с созданием. Объясню почему именно скрипт. Я написал батник, который забирает с сетевого диска документы и пакует их в формат с датой+время.

@echo Начнем >> 1.log
@Echo off
@DATE /t >> 1.log
@TIME /T >> 1.log
@echo Копирую и сохраняю результат копирования в лог ...
@xcopy v:\post\*.doc /z /c /Q >> 1.log
@echo Пакую... >> 1.log
@rar a -ag + YYYY:MM:DD:HH:MM \*.doc >> 1.log
@echo Перемещаю архив... в папку TEMP >> 1.log
@move *.rar TEMP
@echo Удаляю файл doc... >> 1.log
@del /F d:\*.doc
@echo Cделал... >> copybankomat.log

Я хочу, чтобы он запускался через каждые полчаса. Как это сделать???
Сделал еще один батник

@Echo off
@schtasks /create /ru /sc minute /mo 30 /tn TEMP /tr d:\copy.cmd

Всё бы хорошо, но хочется чтобы запускался в фоновом режиме. А то, появится, и бывает висит.
Вопросы : Может скрипт - ? помогите. Или если батник, то как ему втулить фоновый запуск, ну чтоб не мелькал ????

Автор: SymA
Дата сообщения: 07.11.2008 18:24
Довольно часто не по моей вине пропадает VPN-соединение. Подключаюсь батником с командой "Rasdial".
Запускаем батник и наблюдаем:

Screenshot before

и через 5-7 секунд, если подключение потерпело неудачу, наблюдаем:

Screenshot after

Подскажите, как написать, чтобы в случае НЕподключения батник возвращался в точку ":r". Пробовал findstr, искать текст "компьютер не отвечает" и др. и если найдёт, то GOTO:R, но не получилось.


Код:
Title ADSL
:r
rasdial "VPN" login pass
Автор: king_stiven
Дата сообщения: 07.11.2008 18:34
stydik

Цитата:
Я хочу, чтобы он запускался через каждые полчаса. Как это сделать???


Цитата:
Или если батник, то как ему втулить фоновый запуск, ну чтоб не мелькал ????

В шапке
Автор: 01MDM
Дата сообщения: 08.11.2008 06:31
SymA

А у тебя точно логин - login, а пароль - password??
Автор: buggyboaster
Дата сообщения: 08.11.2008 08:35

Код: set where=%temp% %systemroot% %systemroot%\system32
set what=" 2000 " " 0 "
if exist findings.txt del /q findings.txt

FOR %%a IN (%where%) DO (
FOR %%b IN (%what%) DO (
FOR /F "usebackq tokens=3*" %%g IN (^
`dir /A-D /-C /OS %%a ^| FIND /i %%b`) do (
if not %%h==h323log.txt @ECHO %%a\%%h>> findings.txt
)
)
)

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: как сохранить сетевые настройки


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