Войти

Показать полную графическую версию : Как использовать скрипты ping ip и скрипт ( convert 866 to 1251 ) в одном бат(е)


dark-------13
20-01-2015, 09:26
Здравствуйте,
Есть скрипт который пингует сетевые адреса, которые берет из текстового файла my.txt
После выполнения пинга рабочие IP записываются в документ log_speed_v.2.1.txt, а не рабочие в log_speed_bad.txt
Так как на моем компе проблемы с отображением кодировки 866 , было решено вывод конвертить в 1251, так и сделал, но есть проблемка.
Скрипты конвертации лежат в отдельных бат файлах и все работает, но хочется чтобы весь код был в одном бат файле, - подскажите пожалуйста как это сделать ?

Основной скрипт для пингования IP адресов - (лежит в отдельном bat файле)

@echo off
set /a per=0
echo _____________________________________________________________ >log_speed_v.2.1.txt
date /t >>log_speed_v.2.1.txt
time /t >>log_speed_v.2.1.txt
date /t >log_speed_bad.txt
time /t >>log_speed_bad.txt
For /f "tokens=1,2,3 delims=," %%i in (my.txt) do (
set /a per=0
echo %%j >>log_speed_v.2.1.txt
ping %%i -n 1 | find "╬ЄтхЄ" >>log_speed_v.2.1.txt
ping %%i -n 1 | find "TTL=" >>log_speed_v.2.1.txt || if %per% == 0 (
echo %%j BaD
echo __________________ >>log_speed_bad.txt
echo %%i >>log_speed_bad.txt
echo %%j >>log_speed_bad.txt
)
echo %%k
echo ------------------------------------------------------------- >>log_speed_v.2.1.txt
)
date /t >>log_speed_v.2.1.txt
time /t >>log_speed_v.2.1.txt
echo _____________________________________________________________ >>log_speed_v.2.1.txt
call "convert_ok.bat"
call "convert_bad.bat"



@echo off
@echo. >res_ok.txt
for /F "delims=" %%a in (log_speed_v.2.1.txt) do call :convert %%a
:convert
chcp 1251 >nul
echo. %* >>res_ok.txt
chcp 866 >nul
exit /b


@echo off
@echo. >res_bad.txt
for /F "delims=" %%a in (log_speed_bad.txt) do call :convert %%a
:convert
chcp 1251 >nul
echo. %* >>res_bad.txt
chcp 866 >nul
exit /b

Iska
20-01-2015, 10:31
Так как на моем компе проблемы с отображением кодировки 866 , было решено вывод конвертить в 1251, »
Решать надо существующую проблему, а не создавать самому себе новые.

dark-------13
20-01-2015, 10:44
Решать надо существующую проблему, а не создавать самому себе новые. »
Так , интересно вообще было разобраться с конвертацией.
В частности сейчас не получается сделать так, чтобы эти скрипты работали корректно в одном бат файле.
Если разместить код трех бат файлов в одном, то код выполняется неверно.
Как разделить выполнение кода на части - в одном файле ?

dark-------13
20-01-2015, 12:21
Наконец разобрался - улучшено 23.01.2015 ( Убраны тире и нижние подчеркивания - при записи данных в фалы )

@echo off
SetLocal
set /a per=0
@echo. >log_speed_v.2.1.txt
date /t >>log_speed_v.2.1.txt
time /t >>log_speed_v.2.1.txt
date /t >log_speed_bad.txt
time /t >>log_speed_bad.txt
For /f "tokens=1,2,3 delims=," %%i in (my.txt) do (
set /a per=0
@echo. %%j >>log_speed_v.2.1.txt
ping %%i -n 1 | find "Ответ" >>log_speed_v.2.1.txt
ping %%i -n 1 | find "TTL=" >>log_speed_v.2.1.txt || if %per% == 0 (
@echo. %%j BaD
@echo. >>log_speed_bad.txt
@echo. %%i >>log_speed_bad.txt
@echo. %%j >>log_speed_bad.txt
)
@echo. %%k
@echo. >>log_speed_v.2.1.txt
)
date /t >>log_speed_v.2.1.txt
time /t >>log_speed_v.2.1.txt
@echo. >>log_speed_v.2.1.txt
EndLocal

@echo off
SetLocal
echo. >res_ok.txt
Set a=0
for /F "delims=" %%a in (log_speed_v.2.1.txt) do call :convert %%a
:convert
chcp 1251 >nul
@echo. %* >>res_ok.txt
chcp 866 >nul
EndLocal

@echo off
SetLocal
Set k=0
@echo. >res_bad.txt
for /F "delims=" %%k in (log_speed_bad.txt) do call :convert %%k
:convert
chcp 1251 >nul
@echo. %* >>res_bad.txt
chcp 866 >nul
EndLocal




© OSzone.net 2001-2012