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

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

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


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

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

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

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

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

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


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


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


· base64 — кодирует/раскодирует файл в/из base64
· blat — отправка почты из консоли
· 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 — скрытый запуск командных файлов и консольных программ
· mirror — копирование, создание точной копии всей структуры директорий
· msgbox — вывод сообщения в диалоговом окне
· msgbox (другая) — еще одна утилита для вывода сообщения в диалогоовм окне
· mtee — выводит входящие данные на экран и в файл (одновременно)
· natcat — мощная утилита для передачи данных по 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 — отправка сообщений на электронную почту
· trayconizer — позволяет сворачивать окно программы в трей
· tst — скриптовая утилита для автоматизации telnet-сессий
· UnxUtils — набор GNU утилит для Win32
· wget — консольная утилита для скачивания файлов по HTTP, HTTPS и FTP протоколам
· Win2000 Resource Kit Tools
· Win2003 Resource Kit Tools
· xcodewin — перекодировщик русского текста, поддерживает 14 кодировок
· Пакет утилит для организации интерфейса в bat-файлах
[/more][/b]


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

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


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

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


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

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


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

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


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

Описания работы команд и символов участниками темы:
· setlocal enabledelayedexpansion и переменные окружения
· символы & и && в командной строке
· Переменная %0
Автор: JohnRD
Дата сообщения: 27.04.2007 13:15
добрый день/ночь

подскажите пожалуйста как прописать значение в реестре
reg add HKLM\SOFTWARE\Classes\Installer\Products\32F36B64A4B252548A72860862EBE504\SourceList /v LastUsedSource /t REG_EXPAND_SZ /d "n;1;\\172.17.52.221\INSTALL 2\WIN32\" /f

n;1;\\172.17.52.221\INSTALL 2\WIN32\ последний слеш не прописывается, что нужно поставить перед ним..
n;1;\\172.17.52.221\INSTALL 2\WIN32^\ так не понимает

спасибо
Автор: midda2
Дата сообщения: 27.04.2007 13:27
а так попробовать

n;1;\\172.17.52.221\INSTALL 2\WIN32\\
Автор: KapralBel
Дата сообщения: 27.04.2007 13:28
JohnRD
А поставь на конце 2 слэша, а не 1
Автор: wolf0425
Дата сообщения: 27.04.2007 13:46
dvarok

Цитата:

Цитата: dvarok так с каким путём запускается батник и по какому пути лежит temp ?
если пути вида \\server\share и temp лежит вместе с батником -
замени temp на %~dp0temp что-ли...

батник и темп лежат в одной папке
Автор: JohnRD
Дата сообщения: 27.04.2007 14:12
midda2 KapralBel
спасибо все ок
Автор: dvarok
Дата сообщения: 27.04.2007 14:49

Цитата:
dvarok

Цитата:

Цитата:
dvarok так с каким путём запускается батник и по какому пути лежит temp ?
если пути вида \\server\share и temp лежит вместе с батником -
замени temp на %~dp0temp что-ли...

батник и темп лежат в одной папке

что в одной папке - поняли с первого раза, интересует - какой каталог считается текущим во время выполнения батника - т.е. echo dir=%cd% в батник вставь, посмотри.
Или просто впиши дополение имени temp до полного, как я тебе написал.


Цитата:
программа taxcom referent, строка именно одна, в ней содержится только имя компа, с какого произошел запуск, ну например comp1, без пробелов в начале, просто одна запись.

что значит с какого? это левый терминальный клиент?

Цитата:
дело в том, что на просмотр файл можно открыть, и блокнотом и фаром, а скрипт грит, что файл не найдет, вероятно он его пытается открыть на запись?
на неправильное открытие - и ругнулся бы по-другому.
А так ругается как будто файл не находит - отсюда и вопросы про путь, где батник ищет.

чтоб не думалось про открытие - можешь руками создать рядом temp2, который точно никто не блокирует, и попробовать указать его.


папка с программой расшарена, подключена к пользователям как сетевой диск.
прописал путь к файлу жестко, типа e:\data\temp, все равно.
Так-же делаю рядом temp2, пишу туда имя компа, пишу в батнике temp2 вместо temp - все работает и отсылает, а на temp ругается, что он не найден, но по f3 открывается и смотрится. вроде уже все объяснил. идеи?
Автор: KapralBel
Дата сообщения: 27.04.2007 15:05
dvarok
Темп случайно не скрытый или рууские буквы в имени содержит или русские буквы в батничке в имени файла?
Автор: dvarok
Дата сообщения: 27.04.2007 15:32
KapralBel
он не скрытый, русских букв нет нигде, проверил. имя файла на всякий случай просто скопировал и вставил, руками не писал. всё одно.
Автор: KapralBel
Дата сообщения: 27.04.2007 15:41
dvarok
В какой кодировке батничек?
Если были русские буквы и кодировка 1251 - то точно не найдет
Автор: wolf0425
Дата сообщения: 27.04.2007 16:07
KapralBel c какого перепуга русские буквы попадут в имя копьютера?
или какая разницы - в какой кодировке батник, если при замене temp на temp2 он работает?


Добавлено:
dvarokесли действительно залочка мешает - влепи в батник для проверки type temp >temp3
если файлик скопируется нормально - заменишь в батнике (temp) на ('type temp')

кстати, я так и не понял - в temp прописан комп, на котором батник исполняется, на котором лежит или с которого инициировали всю эту бодягу?
Автор: KapralBel
Дата сообщения: 27.04.2007 16:17
wolf0425
А в имени файла?
Смотри tEmp - e русская - имя файла в батничке все латиницей
Новый файл создается сразу латиницей - тогда все ОК

А батнички с русскими именами файлов работают только в 866
Автор: dvarok
Дата сообщения: 27.04.2007 16:23
я думаю, что что-то именно в дос-обращениях, потому что когда прога запущена, то фаром даже скопировать этот temp в другое место нельзя, а винда копирует без проблем и когда я его скопировал в другое место и прописал к нему путь в батнике, то все нормально, сработала отправка.

Добавлено:
wolf0425
в темпе написано имя компа с которого запустили прогу, которая лежит в расшаренной на сервере папке. батник запускается сервером по наличию этого файла temp

кстати, скопировался файл такой командой type temp >temp3 . мистика
Автор: wolf0425
Дата сообщения: 27.04.2007 17:18
dvarok
Цитата:
скопировался файл такой командой type temp >temp3 . мистика

почему мистика - type всегда хорошо печатал открытые кем-то на запись логи - потому я его выше и предложил,
да и новый FAR это копирует неплохо - если ему разрешить в настройках.
Непонятно - чего ж for /f возмущается глюкаво - не нашаринг жалуется, а молча посылает :-\

А "копировать в другое место" можно и виртуально, прямо в команде for, синтаксис см.выше
Автор: WSQ
Дата сообщения: 27.04.2007 23:04
Как копировать с ограничением скорости?
Нужно для обновление по выделенным линиям крупных архивов с документацией - качать может по полдня, а работе помешать не должно. Причем запускать должен пользователь, когда ему удобно.

Пока видел/нашел:
- в Тотал коммандер и Far есть копирование с ограничением скорости. Но надо запускать руками. А хотелось бы один значек - "запустить обновление"...
- некоторые файрволы могут ограничть скорость (net-peek например), но лишнюю платную прогу ставить не хочется...
- почти идеально ftp-сервер с ограничением скорости по пользователям: http://forum.ru-board.com/topic.cgi?forum=8&topic=19088&start=280#11 Но нужно поднимать ftp-сервер...

Вопрос: можно ли копировать с простого файл-сервера ограничив скорость со стороны клиента?
Автор: KapralBel
Дата сообщения: 28.04.2007 00:10
WSQ
А ты уверен что ты попал в ту тему?
Автор: resetsa
Дата сообщения: 28.04.2007 07:31
подскажите пжл,а можно ли узнать всех пользователей которые в настоящее время залогинены (т.е ротают в домене)?
Интересует выключения мультилогона пользователей (под дним пользователем - один вход)
Автор: GORA2
Дата сообщения: 28.04.2007 07:55
Начитался здесь про разные представления даты и времени в переменных DATE и TIME при разных настройках в Windows. Подскажите, а такой вариант получения информации о дате и времени, тоже будет зависить от настроек?
Код: @echo off
echo .>temp.txt
call :timdat "temp.txt" "DAT_TIM"
del temp.txt
echo %DAT_TIM%
pause>nul
exit
:timdat
set %~2=%~t1
GOTO :EOF
Автор: wolf0425
Дата сообщения: 28.04.2007 11:46
WSQ
Цитата:
Как копировать с ограничением скорости?

например с помощью killсopy (интерфейс комстроки есть)
http://killprog.narod.ru/killcopyr.html
Автор: igor_andreev
Дата сообщения: 28.04.2007 11:53
GORA2

Цитата:
Подскажите, а такой вариант получения информации о дате и времени, тоже будет зависить от настроек?
Посмотри, что выдает батник, потом зайди в панели управления в региональные настройки, измени формат даты на другой, например yyyy-MM-dd. Запусти свой батник опять.
Автор: GORA2
Дата сообщения: 28.04.2007 12:04
igor_andreev
Ошибку понял. Спасибо.
Автор: NIKZZZZ
Дата сообщения: 28.04.2007 12:33
Чисто теоритический вопрос, почему это не работает?

Код: echo Text | set /p Txt=???
echo %txt%
Автор: Elroir
Дата сообщения: 28.04.2007 15:10
NIKZZZZ

Цитата:
почему это не работает?

Судя по всему, потому что echo каким-то образом создает новую среду, в которой переменной присваивается значение, а потом выходит из этой среды - так, что в той среде, где мы находимся, этой переменной ничего не присвоено. То есть происходит буквально следующее:

Код:
setlocal
set txt=Text
endlocal
echo %txt%
Автор: JohnRD
Дата сообщения: 28.04.2007 15:32
день добрый
подскажите как в списке прибить левую часть до скобок во всех 4500 строках

MAIN\Ababkov_AV (Абабков Александр Васильевич)
MAIN\Abramov_EV (Абрамов Евгений Валерьевич)
MAIN\Abramova_EV (Абрамова Евгения Вячеславовна)
MAIN\Abramova_TY (Абрамова Татьяна Юрьевна)
MAIN\abramova_yv (Абрамова Юлия Валерьевна)


FOR /F "TOKENS=2 DELIMS= " %%A IN (users.txt) DO set %%A
type user.txt|gsar -s"%A%" -r -F>user1.txt
Автор: Elroir
Дата сообщения: 28.04.2007 15:39
JohnRD

Код:
@echo off
for /f "tokens=1* delims=(" %%a in (list.txt) do echo ^(%%b>>newlist.txt
Автор: JohnRD
Дата сообщения: 28.04.2007 15:50
Elroir
спасибо,
реакция у Вас молниеносная я только решил дописать что я накромсал а тут... уже

есть еще вопрос
есть список 4500 строк

Абабков Александр Васильевич
Абрамов Евгений Валерьевич
Абрамова Евгения Вячеславовна
Абрамова Татьяна Юрьевна
Абрамова Юлия Валерьевна

есть еще список 1000 строк

необходимо из первого списка удалить всех кто есть во 2ом
Автор: NIKZZZZ
Дата сообщения: 28.04.2007 16:00
Elroir
Да, судя по второму примеру среду создает конвейер. Сразу же возникает вопрос, а можно ли определить глобальную переменную?




Добавлено:
JohnRD

Цитата:
есть список 4500 строк

А время работы данного скрипта имеет значение?

Автор: JohnRD
Дата сообщения: 28.04.2007 16:10
NIKZZZZ
до среды можно

Добавлено:
Elroir
ошибся прошу прощения
Автор: Elroir
Дата сообщения: 28.04.2007 16:12
JohnRD
Это не я спросил - это NIKZZZZ
(Уже исправили)
Автор: igor_andreev
Дата сообщения: 28.04.2007 16:33
JohnRD

Цитата:
необходимо из первого списка удалить всех кто есть во 2ом

А списки у тебя по алфавиту отсортированы? Если воспользуешься uniq.exe из UnxUtils в шапке - несколько секунд займет. Типа

copy /b 4500.txt+1000.txt all.txt
sort all.txt | uniq -u>new.txt

Параметр -u у uniq - это "only print unique lines", она в отсортированном списке не будет выдавать в stdout(в new.txt) повторяющиеся строчки.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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