Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах

Модерирует : KLASS, IFkO

vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задачи на bat-файлах
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки:
· Cmd. Описание от разработчиков
· Набор GNU утилит для win32
· Встроенный справочник по командам: hh ntcmds.chm
· Пакет утилит для организации интерфейса в bat-файлах
· Использование ansi.sys
· cmdow — изменение параметров и видимости дос-окна
· blat — отправка почты из консоли
 
Готовые решения и частые вопросы:
· Создание листинга директорий на примере создания плейлиста
· Разименовывание переменных
· Переименовывание файлов по дате создания
· Запуск сетевого подключения
· Запуск bat файлов как сервис
· Пример выполнения команд по результату команды ping
· Использование даты на день раньше чем сегодня
 
Невозможности — что нельзя сделать с помощью командных файлов:
· изменть конфигурацию IP на удаленной машине (без помощи rcmd.exe) [добавил ALEF]
 
 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Старая версия первого сообщения

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 22:58 18-11-2005 | Исправлено: Elroir, 05:50 11-11-2006
Vrem

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Refugee
 
Спасибо, то что нужно!

Всего записей: 44 | Зарегистр. 26-08-2006 | Отправлено: 02:36 20-09-2006
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Refugee
спасибо за ключ в реестре, да я знаю что можно задать через груповые политики, только я то хочу что пользователь на самом деле не имел возможности редактировать, я хочу один раз в его профили азначить параметры и все больше что бы ни кто не имел возможности менять.

Всего записей: 1495 | Зарегистр. 07-09-2004 | Отправлено: 08:16 20-09-2006
TSCHIPOLINO

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
У меня такой вопрос. Как все буквы r в именах файлов заменить на буквы p.
Кто знает, подскажите.

Всего записей: 4 | Зарегистр. 20-09-2006 | Отправлено: 17:25 20-09-2006
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR
а он мне по команде dir после смены каталога cd
он отображает каталог откуда запущен скрипт

Всего записей: 1495 | Зарегистр. 07-09-2004 | Отправлено: 17:50 20-09-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TSCHIPOLINO
setlocal enabledelayedexpansion
for %%i in (*) do set t=%%i & ren "!t!" "!t:r=p!"

Всего записей: 512 | Зарегистр. 31-03-2004 | Отправлено: 18:01 20-09-2006
tolyn77



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Refugee
а можно как нибудь удалить все символы в имени файла после определенного, ну например был
Q311967_FFC1E87846E9C85815FF78E2276BE595BA547F38.exe
q312369_37389F2393D35E685CF3818D75C6123365F5EEF2.exe
а нужно так
Q311967.exe
q312369.exe
?

Всего записей: 1495 | Зарегистр. 07-09-2004 | Отправлено: 08:04 21-09-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
tolyn77

Код:
 
for /f "tokens=1,2 delims=_" %%a in (ListOfFiles.txt) do rename %%a_%%b %%a.exe
 

 
2ALL
Кто-то, когда-то в этой ветке спрашивал по поводу самоликвидации скрипта после выполнения. Вот один из вариантов реализации:

Код:
 
@ECHO OFF
if %1.==. "%~f0" del "%~f0" 2>NUL
echo Goodbye!
%*
 

 
И еще: Попытка написать скрипт удаляющий спам с почтового сервера IIS. Слишком радикальный и требует доработки и оптимизации:

Код:
 
@echo off
set Target="C:\Inetpub\mailroot\Mailbox"
set tF1=%tmp%\$tmp1$.reg
set tF2=%tmp%\$tmp2$.reg
for /R %Target% %%a IN (*.eml) DO find "RDNS failed" %%a>>%tF1%
if exist %tF1% for /F "tokens=1,2 delims= " %%a in (%tF1%) do call :GetSpamPath %%a %%b
del /f /a %tF1% 2>NUL
del /f /a %tF2% 2>NUL
set tF1=
set tF2=
set Target=
goto :EOF
 
:GetSpamPath
set SpamMailPath=
if %1.==Received:. (set /P SpamMailPath=<%tF2%) else echo %2>%tF2%
if defined SpamMailPath del /f /a "%SpamMailPath%" 2>NUL
goto :EOF
 

 
Доделать бы его чтобы не удалял, а только изменял Subject...

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 10:00 21-09-2006 | Исправлено: Allex_Van_Fogen, 10:04 21-09-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Вот один из вариантов реализации

А можно и проще :
 
del "%~f0"
 
----------------
 
Есть такая задача:
 
Нужно сделать проверку, на подключении к сети. Т.е если комп подключён к инету, то нужно чтобы возвращался %errorleve% 0, а если не подключён, то чтобы возвращал естественно %errorlevel% 1 - Возможно такое?

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 13:27 21-09-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
ViSiToR
del "%~f0"
 

 
Ругаитца! ;o)
 

Цитата:
Нужно сделать проверку, на подключении к сети.

А ping.exe чем то неустраивает? Как раз возращает 1 в errorlevel. Вот например:

Код:
 
@echo off
echo Start link testing...
set mF=%SystemRoot%\Temp\pingfail.err
ping -n 1 "ДАЛЬНИЙ" IP АДРЕС>NUL
if ERRORLEVEL 1 (
    echo ISP UA-IX link down. Now trying gateway...
    ping -n 8 "БЛИЖНИЙ" IP АДРЕС (шлюз прова напр.)>NUL
    if ERRORLEVEL 1 (
        echo ISP gateway link down. Some trouble...
        if not exist %mF% rem.>%mF%&&call :Reboot
        goto :EOF
    ) else (
        echo Gateway is Ok! Call your ISP ^(t. XXX-XXXX^) to solve Internet link trouble.
    )
) else (
call :SDel %mF%
echo Ok.
echo Link work fine. Bye!
)
set mF=
goto :EOF
 
:Reboot
ping -n 1 127.0.0.1>NUL
if not ERRORLEVEL 1 (call :SendAlert) else echo Can't send alert. May be LAN interface down...
echo Trying restart...
net send * ATTENTION! The %COMPUTERNAME% will be restarted in 10 sec due Internet link problem.>NUL 2>&1
shutdown /r /f /t 10 /d E:5:20 /c "GATEWAY LINK DOWN">NUL 2>&1
goto :EOF
 
:SendAlert
set tM=smtp://сервер.куда.слать
set tF=%SystemRoot%\Temp\$temp$.tmp
echo From: ^<адрес1@домен1^>>%tF%
echo To: ^<адрес2@домен2^>>>%tF%
echo Subject: ATTENTION! %COMPUTERNAME% sheduled to reboot due interface problem.>>%tF%
echo Date: %DATE% %TIME:~0,-3% +0300>>%tF%
echo Organization: Censured>>%tF%
echo MIME-Version: 1.0>>%tF%
echo Content-Type: text/plain;>>%tF%
echo     format=flowed;>>%tF%
echo     charset="koi8-r";>>%tF%
echo     reply-type=original>>%tF%
echo Content-Transfer-Encoding: 7bit>>%tF%
echo X-Priority: ^1>>%tF%
echo X-MSMail-Priority: High>>%tF%
echo X-Unsent: ^1>>%tF%
echo X-MimeOLE: Produced By DOS Batch Script>>%tF%
echo.>>%tF%
echo "%COMPUTERNAME%" SHEDULED TO REBOOT.>>%tF%
sndmsg -t -m %tF% -o %tM%
call :SDel %tF%
echo Alert message sended to support team.
set tM=
set tF=
goto :EOF
 
:SDel
if not exist %1 goto :EOF
del /f /a %1 2>NUL
goto :EOF
 

 
sndmsg (10kb) брал на странице автора Small HTTP Server. Маленько её подрихтовал
чтобы работала с любыми серверами.

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 15:51 21-09-2006
Jagstang

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Хотелось бы задать 2 вопроса:
1. Можно ли перенаправить вывод на консоль в переменную? То есть чтобы так
echo test || set var давал в результате var=test. Обмен через временный файл не хочется делать.
2. Как в echo вставить перенос строки и возврат каретки?

Всего записей: 4 | Зарегистр. 21-09-2006 | Отправлено: 18:05 21-09-2006
ViSiToR



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Allex_Van_Fogen

Цитата:
Ругаитца!

На что? кто? я помещаю эту строчку в батник - del "%~f0" - затем запускаю его, и наблюдаю как он через мменьше чем секунду исчезает у меня на глазах - может на разных системах по разному? какая системя?
 

Цитата:
А ping.exe чем то неустраивает?

Наверно устраивает, просто я плохо с ним знаком. А что если я просто пропишу так:
 

Код:
ping -n 1 Адрес IP >nul & if errorlevel 1 exit 1

 
Это будет надёжная проверка?
 
Мне просто нужно это в одной строчке, как можно кароче, и без внешних утилит. А такж нужно чтобы выходя, батник передавал значение (если не подключён, то 1).

----------
ViSiToR a.k.a CreatoR
CreatoR это не ник, CreatoR это стиль жизни!

Всего записей: 3251 | Зарегистр. 01-04-2006 | Отправлено: 18:41 21-09-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ViSiToR

Цитата:
 
может на разных системах по разному? какая системя?
 

Вряд ли. XP SP2 Eng + MUI
 

Цитата:
 
Наверно устраивает, просто я плохо с ним знаком.
 

Ну дык редкая же тулза!
 

Цитата:
Это будет надёжная проверка?

Нет конечно. Более менее (ИМХО ест-но) как показано на скрипте постом выше. Для кода возврата надо писать: exit /b 1

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 19:25 21-09-2006 | Исправлено: Allex_Van_Fogen, 19:34 21-09-2006
FXPELIVE

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Помогите написать пакетник, который устанавливает переменной строчку в неком файле file.txt, а если не найдет этот файл, то устанавливает переменной строчку в неком файле file_default.txt
Заранее благодарен!

Всего записей: 346 | Зарегистр. 27-04-2006 | Отправлено: 19:27 21-09-2006
Allex_Van_Fogen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Jagstang
По идее так:
echo Some junk|set /p MyVar=
но почему-то у меня не работает...

Всего записей: 92 | Зарегистр. 09-03-2003 | Отправлено: 19:28 21-09-2006
kpuk



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Очень необходим ответ на вопрос:
Можно ли передать запущенному консольному процессу команду через cmd.exe
Интересует чтото в стиле ".info >proga.exe"
Тока proga.exe - это уже запущенное консольное приложение, а ".info" это передаваемая команда.

Всего записей: 1096 | Зарегистр. 07-03-2004 | Отправлено: 20:02 21-09-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpuk
а как запущенная proga берет команды? через stdin?

Всего записей: 512 | Зарегистр. 31-03-2004 | Отправлено: 21:56 21-09-2006
kpuk



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
не знаю я таких слов )))
ты напиши пож. как можно а я проверю

Всего записей: 1096 | Зарегистр. 07-03-2004 | Отправлено: 22:56 21-09-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpuk
можно ли передавать ей так:  proga < .info  ?

Всего записей: 512 | Зарегистр. 31-03-2004 | Отправлено: 00:06 22-09-2006
kpuk



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
мне надо в уже запущенную программу передать команду.
А

Цитата:
можно ли передавать ей так:  proga < .info  ?

так оно ничего не далает, только дос приложение мигает и усё
 

Всего записей: 1096 | Зарегистр. 07-03-2004 | Отправлено: 00:53 22-09-2006
Refugee

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kpuk
если бы она со стандартного ввода читала, можно бы так:
echodata.cmd:
@echo off
:L
if NOT EXIST data.txt sleep 1 & goto L
type data.txt & del data.txt & goto L
запускаем прогу так: echodata.cmd | proga
когда в тек. каталоге появляется data.txt, батник отправляет его проге.
 
если прога консольные функции использует, то разве что ей кнопки посылать.

Всего записей: 512 | Зарегистр. 31-03-2004 | Отправлено: 01:56 22-09-2006
   

Страницы: 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах
vu1tur (14-11-2006 16:59): http://forum.ru-board.com/topic.cgi?forum=62&topic=9040


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru

Рейтинг.ru