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

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

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


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

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

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


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

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

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

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

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


· 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 - управление шарами
· 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 *.*) в код батника
· Переход из 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
Автор: vcrank
Дата сообщения: 26.05.2009 11:08
Помогите с такой задачей:
Необходимо один раз в минуту менять IP в диапазоне от 192.168.1.10 до 192.168.1.255
Собственно смену IP адреса я делаю так:

Код: netsh interface ip set adress "Подключение по локальной сети 2" static 192.168.1.10
Автор: Maza_Faka
Дата сообщения: 26.05.2009 12:06
vcrank
Пример:

Код:
@Echo Off

For /L %%A In (1,1,255) Do (
Netsh Interface IP Set Adress "Подключение по локальной сети 2" static 192.168.1.%%A
Ping -n 60 localhost>Nul
)
Автор: vcrank
Дата сообщения: 26.05.2009 12:46
Maza_Faka
спасибо
Поправил только

Цитата:
@Echo Off

For /L %%A In (10,1,255) Do (
Netsh Interface IP Set Address "Подключение по локальной сети 2" static 192.168.1.%%A
Ping -n 60 localhost>Nul
)


Ещё надо бы шлюз постоянно прописывать. Почему-то не нашёл как это прописать
Автор: Maza_Faka
Дата сообщения: 26.05.2009 12:51
vcrank

Цитата:
надо бы шлюз постоянно прописывать


Код:
gateway=192.168.1.%%A
Автор: vcrank
Дата сообщения: 26.05.2009 12:59
Maza_Faka
Премного благодарен. Вот полностью устраивающий меня вариант


Цитата:
@Echo Off
Netsh Interface IP Set Address "Подключение по локальной сети 2" static 192.168.1.%%A mask=255.255.255.0 gateway=192.168.1.1


А возможно ли средствами bat-файлов узнать результаты команды Ping ? Либо пинги идут, либо нет (потери и прочее не интересует)
Автор: HaK1R
Дата сообщения: 26.05.2009 13:09
garri671
отчет в текущей папки

Код: @echo off
set "SavePath=%~dp0\delet.log"
pushd "%SystemDrive%\DOCUME~1\"
chcp 1251 1>nul
for /f "tokens=*" %%a in ('dir /b /ad') do (
if exist "%%~a\LOCALS~1\Temporary Internet Files\" (
pushd "%%~a\LOCALS~1\Temporary Internet Files\"
del /f /s /q /a * 1>>"%SavePath% 2>&1
rmdir /s /q . 1>nul 2>&1
popd
)
)
chcp 866 1>nul
popd
Автор: Maza_Faka
Дата сообщения: 26.05.2009 13:31
vcrank

Цитата:
узнать результаты команды Ping ? Либо пинги идут, либо нет

Можно:

Код:
@Echo Off
Ping -n 1 192.168.1.1>Nul
If "%ERRORLEVEL%"=="1" Echo No connect
Автор: tatuchipapa
Дата сообщения: 26.05.2009 23:11
Какие службы должны быть включены в winXP, чтобы скрипты срабатывали?

Добавлено:
Задача - если есть пинг на роутер(192.168.0.69), сделать пинг на r0.ru, если нет пинга на роутер, выполнить скрипт-1(1rebt.vds), если нет пинга на r0.ru, выполнить скрипт-2(2rebt.vds).
Для наглядности выглядит так:

Компутер-->точка доступа(её ребут 1rebt.vds)-->точка доступа-->роутер(ребут 2rebt.vds)-->r0.ru

Код: @echo off
:loop
ping 192.168.0.69 | find "TTL=" 1>nul 2>&1
if errorlevel 1 (
wscript.exe "1rebt.vbs"
)
ping r0.ru | find "TTL=" 1>nul 2>&1
if errorlevel 1 (
wscript.exe "2rebt.vbs"
)
ping -n 61 localhost 1>nul 2>&1
goto :loop
Автор: Mr_Hat
Дата сообщения: 27.05.2009 04:02
Есть задача получить из файла название интернет соединения


Код: more "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk" | find /i "[" > %temp%\rasphone.tmp
Автор: garri671
Дата сообщения: 27.05.2009 05:28
HaK1R

Цитата:
отчет в текущей папки

Спасибо!
Добавлено:
Bigmozg

Цитата:
Привет всем, стоит задача:
Создать пакетный файл tri.bat, при вызове которого могут быть заданы параметры – имена трех других файлов. Проверить наличие параметров и су-ществование этих файлов.

---tri.bat---
@echo off
if not "%1"=="" goto m1
(echo "Ошибка - Не введен первый параметр")
goto finish
if not "%2"=="" goto m2
(echo "Ошибка - Не введен второй параметр")
goto finish
if not "%3"=="" goto m3
(echo "Ошибка - не введен третий параметр")
goto finish
:m1
if not exist %1 (copy >%1)
:m2
if not exist %2 (copy >%2)
:m3
if not exist %3 (copy >%3)
call tri1.bat %1 %2 %3
:finish
---tri1.bat---
attrib -r -h -s -a %1
attrib -r -h -s -a %2
attrib -r -h -s -a %3
attrib +r +s %1
attrib +r +s %2
attrib +r +s %3

Автор: NIKZZZZ
Дата сообщения: 27.05.2009 05:58
Mr_Hat


Код: @Echo off
Echo.
Set i=0
For /f "usebackq tokens=1 delims=[]" %%a in (`more "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Connections\Pbk\rasphone.pbk" ^| find /i "[" ^| find /i "]"`) Do Call :_Dial %%a
set _ok=
set /p _ok=Enter your choice :
Call :_Choice Dial[%_ok%]
GoTo :Eof

:_Dial
Set /a i=i+1
Set Dial[%i%]=%1
echo %i% - %1
GoTo :Eof

:_Choice
setlocal enabledelayedexpansion
Set ChoiceDial=!%1!
If "%ChoiceDial%"=="" (
Echo Incorrect choice
) Else (
Echo Your choice - "%ChoiceDial%"
)
GoTo :Eof
Автор: HaK1R
Дата сообщения: 27.05.2009 11:14
garri671

Цитата:
---tri1.bat---
attrib -r -h -s -a %1
attrib -r -h -s -a %2
attrib -r -h -s -a %3
attrib +r +s %1
attrib +r +s %2
attrib +r +s %3

думая так проще
Код:
attrib +r -h +s -a "%1"
attrib +r -h +s -a "%2"
attrib +r -h +s -a "%3"
Автор: garri671
Дата сообщения: 27.05.2009 11:29
HaK1R

Цитата:
думаю так проще

Согласен!

Подскажите, может кто-то сталкивался с проблемкой: как в пределах домена через бат-файл скопировать файлы с одного компа на другой?
Автор: HaK1R
Дата сообщения: 27.05.2009 11:40
tatuchipapa
попробуй так

Код: @echo off
:loop
ping 192.168.0.69 | find "TTL=" 1>nul 2>&1
if errorlevel 1 (
start "" /wait "%SystemRoot%\system32\wscript.exe" "1rebt.vbs"
)
ping r0.ru | find "TTL=" 1>nul 2>&1
if errorlevel 1 (
start "" /wait "%SystemRoot%\system32\wscript.exe" "2rebt.vbs"
)
ping -n 61 localhost 1>nul 2>&1
goto :loop
Автор: ZeroCrash
Дата сообщения: 27.05.2009 19:49
Всем привет!
У меня возникла проблемка с копированием... Вот:

Код: copy 123 "%UserProfile%\Избранное"
Автор: HaK1R
Дата сообщения: 27.05.2009 19:57
ZeroCrash
так нельзя копировать

Код: echo D | xcopy /e 123 "%UserProfile%\Избранное"
Автор: ZeroCrash
Дата сообщения: 27.05.2009 20:04
Опять же файлы не были скопированны. Прошарил все папки с Избранным.....


Код: D:\1\$OEM$>echo D | xcopy /e 123 "C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээю
х"
Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]? D
Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]?
Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]?
Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]?

Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]?

Заменить C:\Documents and Settings\ZeroCrash\&#9562;чсЁрээюх [Yes (да)/No (нет)/All (в
се)]?
D:\1\$OEM$>pause
Автор: 01MDM
Дата сообщения: 27.05.2009 20:13
ZeroCrash

А зачем `echo D`? Просто:

Код:
@echo off
chcp 1251 1>nul
xcopy /e /i "Что" "Куда"
Автор: HaK1R
Дата сообщения: 27.05.2009 22:14
01MDM
Он первым делом выдает запрос что это имя файла или каталога, у тебя за это отвечаетт параметр /i
Автор: 01MDM
Дата сообщения: 27.05.2009 22:25
HaK1R


Цитата:
у тебя за это отвечаетт параметр /i

Из справки

Цитата:

/I Если конечная папка не существует и копируется более одного
файла, подразумевается, что местом назначения должна быть папка.
Автор: garri671
Дата сообщения: 28.05.2009 06:23
Доброго времени суток!
Подскажите как в бат-файле скопировать с одного компа на другой каталог
set pin="\\comp\c$:\2\*"
set pout="\\comp\d$:\2\"
xcopy %pin% %pout% /s /I
это не проходит, может есть какие то варианты
Автор: king_stiven
Дата сообщения: 28.05.2009 06:40
garri671
что пишет в батнике? А звёздочка в твоём примере не мешает? подставь вместо неё конкретное имя. И ещё попробуй убрать слэши.
set pin="\\comp\c$:\2"
set pout="\\comp\d$:\2"
xcopy %pin% %pout% /s /I
Автор: garri671
Дата сообщения: 28.05.2009 07:22
king_stiven
Пишет:
Неправильно указан диск
Автор: Evgeny1969
Дата сообщения: 28.05.2009 07:49
Неожиданно напоролся на проблему там, где не ожидал.
Задача - необходимо отправить на локальный USB-принтер двоичный файл из командной строки. Разумеется начал с

copy /b имя файла ...

а вот с назначением копирования - вопросы. lpt1 и prn разумеется не катят. usb001 или "имя принтера" - копирование идет просто в файл. Копирование в \\localhost\имя_принтера или \\localhost\usb001 - ошибка: не найден сетевой путь.

Временно нашел решение копировать файл на \\имя_компа\сетевое_имя_принтера. Но это требует расшаривания принтера в сети, что нежелательно.

Подскажите, плз, адрес назначения
Автор: 01MDM
Дата сообщения: 28.05.2009 07:58
garri671
Проверить не могу, но сначала надо подключить сетевой диск.
Попробуй так:

Код:
@echo off
pushd \\comp\c:
set "from=%cd%"
pushd \\comp\d:
xcopy /e /i "%from%\2" "2"
popd
popd
Автор: king_stiven
Дата сообщения: 28.05.2009 08:13
garri671
Так укажи правильно, в сетевых делах не разбираюсь, тут причина не в xcopy наверно.
Проверь на имя типа
if exist \\comp\c$:\2 echo yes
Автор: garri671
Дата сообщения: 28.05.2009 08:26
01MDM

Цитата:
Проверить не могу, но сначала надо подключить сетевой диск.
Попробуй так

Пишет - не найден сетевой путь

Цитата:
Если не получится, тогда net use /?

каким боком? куда подставить? подскажите плиз, учусь
Автор: king_stiven
Дата сообщения: 28.05.2009 08:33
Evgeny1969
Не знаю, поможет или нет, с помощью команды devcon(сторонней) показываются имена как в диспетчере устройств. Там я нашёл имя для своей мышки USB\Vid_13ba&Pid_0017&Rev_0001&MI_01. Может и с принтером прокатит.

Добавлено:
garri671

Цитата:
Пишет - не найден сетевой путь

После какой строчки пишет? Слэши убрал?
Автор: Markelki
Дата сообщения: 28.05.2009 08:35
Как можно сделать, чтобы при запуске bat файла сначала отключался сетевой принтер, а потом подключался?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778

Предыдущая тема: во вкладке автозагрузка


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