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

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

Автор: Robby
Дата сообщения: 10.04.2009 11:11
Помогите доделать батник. Нужно разобрать большое количество файлов. Есть такой код:

Код:
@echo off
cls
pushd %1
for %%a in (*.*) do (
for /f "delims=." %%b in ("%%~na") do (
md "%%b" 2>nul
if /i not "%%~xa"==".rar" (move "%%a" "%%b") else (
echo %%a | findstr /i /l /m ".part1">nul && rar x "%%a" "%%b">nul 2>&1
echo %%a | findstr /i /l /m ".part">nul || rar x "%%a" "%%b">nul 2>&1
if errorlevel 1 (echo Unpack error >> "%%~dpna.txt") else (del /q "%%a"))
))
Автор: Nagual
Дата сообщения: 10.04.2009 12:49
CMD
действительно, маски при удалении маршрутов не работают
решение удалением каждого маршрута
Код:
@echo off
set r_mask=10.*
for /f %%a in ('netstat -r^|findstr %r_mask%') do route delete "%%a"
Автор: Nagual
Дата сообщения: 10.04.2009 19:48
sfinx26
Код:
set "tsk=calc.exe"
tasklist|findstr/i "%tsk%"&&taskkill /f /im "%tsk%"&&start "" "%tsk%"
Автор: CMD
Дата сообщения: 11.04.2009 10:26
Nagual
в таком случае поиск происходит по всей строке, а нужно только по точке назначения. Пример таблицы маршрутов:

Код:
Network Address Netmask Gateway Address Metric
10.2.0.0 255.255.0.0 10.0.45.1 1
192.168.0.0 255.255.0.0 10.0.45.1 1
Автор: Valdon
Дата сообщения: 11.04.2009 13:25
Есть строка неопределенной длины. Нобходимо выделить подстроку до первого(определенного "\") символа найденного в искомой строке справа на лево.... Как бы это попроще реализовать?
Например:
SET str=c:\werer\3 44\program\1 tttt
нужно из str переменой str1 присвоить значение 1 tttt ?
Автор: 01MDM
Дата сообщения: 11.04.2009 13:59
Valdon

Цитата:
Например:
SET str=c:\werer\3 44\program\1 tttt
нужно из str переменой str1 присвоить значение 1 tttt ?


Например:

Код:
@echo off
setlocal

set str="c:\werer\3 44\program\1 tttt"
set str=%str:\=^",^"%

for %%i in (%str%) do set "str1=%%~i"
echo %str1%
Автор: Valdon
Дата сообщения: 11.04.2009 15:24
01MDM, просто класс А если усложнить пример, нужно выделить не первую подстроку а третью справава на лево, т.е. чтоб str1=3 44 ?

ЗЫ:Извините за назойливость, хочу просто вкурить побольше примеров обработки строк, чтоб потом безпроблемно их батником парсить.....
Автор: batniki
Дата сообщения: 11.04.2009 15:24
Помогите:

Есть переменные:

Код: var "s1=blabla"
var "s2=bla-bla"
Автор: 01MDM
Дата сообщения: 11.04.2009 18:02
Valdon

Код:
@echo off
setlocal

set "str=c:\werer\3 44\program\1 tttt"

:: Определяем кол-во полей c разделителями "\"
:tok
set /a tok+=1
for /f "tokens=%tok% delims=\" %%i in ("%str%") do (
if not "%%i"=="" goto:tok
)

:: Берем нужное поле справа
set /a tok-=3

for /f "tokens=%tok% delims=\" %%i in ("%str%") do set "str1=%%i"

echo %str1%
Автор: NvvLazyTiger
Дата сообщения: 12.04.2009 01:54
Valdon
Альтернативный ("справа налево") способ разбора именно путей на элементы:
Код: @echo off
set Str0=c:\werer\3 44\program\1 tttt
set Num=0
set Job=*

:Again
call :SplitWayJob "%Str0%"
if NOT defined Job goto :eof
echo Str%Num%=%Job%
goto Again

:SplitWayJob %str%
set Way=%~dp1
set Job=%~nx1
set /a Num+=1
set Str0=%Way:~0,-1%
if %Num% == 1 set Str1=%Job%
if %Num% == 2 set Str2=%Job%
if %Num% == 3 set Str3=%Job%
if %Num% == 4 set Str4=%Job%
if %Num% == 5 set Str5=%Job%
Автор: AnGo
Дата сообщения: 12.04.2009 07:31
Hi, all!
Возникла не понятная мне проблема.
Имеется следующий батничек:

Код:
@echo off
:try
ping -n 1 ххх.ххх.ххх.ххх | find /i "TTL=">nul
if %errorlevel%==0 (
echo Working
echo %TIME%
) else (
echo Not working
echo %DATE% %TIME%
rasdial ИМЯ ЛОГИН ПАРОЛЬ
ping -n 10 -w 1000 127.0.0.1>nul
rasdial | find /i "ИМЯ" > null
if %errorlevel% == 0 (
echo ИМЯ started
)else (
echo ИМЯ not started
)
)
rem ping -n 300 -w 1000 127.0.0.1>nul
sleep.exe 300
goto try
Автор: Maza_Faka
Дата сообщения: 12.04.2009 09:29
AnGo
Попробуйте так:

Код:
@Echo off

:try
ping -n 1 ххх.ххх.ххх.ххх | find /i "TTL=">nul && GoTo :Success || GoTo :Recon

:Success
echo Working
echo %TIME%
ping -n 300 -w 1000 127.0.0.1>nul
GoTo :try

:Recon
echo Not working
echo %DATE% %TIME%
rasdial ИМЯ ЛОГИН ПАРОЛЬ

ping -n 10 -w 1000 127.0.0.1>nul

rasdial | find /i "ИМЯ">null && echo ИМЯ started || echo ИМЯ not started
goto :try
Автор: batniki
Дата сообщения: 12.04.2009 13:34
Помогите, пожалуйста с batch'ем.

Нужно, чтобы в последней строке, где записывается %s1% , записывалось значение %value% +1 , т.е. value изначально равно 1, +1 = 2 получится переменная %s2% её содержимое и запишется в LogonPrompt


Код: @echo off
set "s1=blabla"
set "s2=blabla2"
set "s3=blabla3"
set "s4=blabla4"
set "s5=blabla5"
set "s6=blabla6"
set "s7=blabla7"
set "s8=blabla8"
set "s9=blabla9"
set "s10=blabla10"

reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LogonPromptEnable >nul & if errorlevel 1 ( goto lack ) else ( goto resence )

:: Добавление параметров со значениями
:lack
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v "LogonPromptEnable" /t REG_SZ /d "1"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v "LogonPrompt" /t REG_SZ /d "%s1%"

:: Проверка значения параметра на integer
:resence
for /f "tokens=3*" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v LogonPromptEnable') do set "value=%%i %%j"
echo %value% | findstr /i /r /c:"[0-9]">nul 2>&1||goto lack
...
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /f /v "LogonPrompt" /t REG_SZ /d "%s1%"
Автор: quaka
Дата сообщения: 12.04.2009 20:39
Здравствуйте!
Просьба помочь в одном маленьком дельце))

Допустим есть скрипт № 1,
с таким кодом:
"
@echo on
ping mail.ru >out.txt
pause
"
Выводится результат pingа до mail.ru в out.txt.

В out.txt появляются строчки на подобии:
...
Ответ от 194.67.57.20: число байт=32 время=19мс TTL=117
...

Как из файла out.txt вытащить IPшник mail.ru и вставить в скрипт № 1 команду "tracert (IP mail.ru)"?

Просто сделать "tracert mail.ru" мне не совсем подходит т.к хочется понять как делать подобные подстановки.
Заранее спасибо!

Чуть дополню, допустим IP адрес всегда начинается на 194.67...., как бы организовать поиск в файле out.txt по такому шаблону?
Автор: sas1111
Дата сообщения: 12.04.2009 20:42

Доброго Вам.!!!.
Нужно реализовать такую задачу -

Добавлено:
.

Доброго Вам.!!!.
Нужно реализовать такую задачу - имеется файл Dannie.DAT
нужно прочесть ЗНАЧЕНИЕ (до 8 байт) находящееся в адресах <смещение и байт начало>до<смещение и байт конца>. занести считанное значение в File1.dat , перевести его в 10-тичное и записать в File2.dat. Адреса и имена передаются как параметры при запуске.
типа <файл данных> <начало> <конец значения> File1.dat File2.dat

xxx.bat Dannie.dat 00001053 0000105А File1.dat File2.dat

(и прошу извенение за предидущее каряво отправленное сообщение. )


.
Автор: Nagual
Дата сообщения: 12.04.2009 21:10
CMD
после for /f поставить "tokens=1"
Автор: 01MDM
Дата сообщения: 12.04.2009 21:20
quaka
Можно и без out.txt

Код:
@echo off
for /f "tokens=2 delims=[]" %%i in ('ping -n 1 mail.ru') do tracert %%i
Автор: Nagual
Дата сообщения: 12.04.2009 21:41
Valdon
Код:
set str="c:\werer\3 44\program\1 tttt"
for /f "delims=" %%a in (%str%) do echo "%%~nxa"


Цитата:
если усложнить пример

если путь существует
Код:
set str="c:\werer\3 44\program\1 tttt"
cd/d %str%\..\..
for /f "delims=" %%a in ("%cd%") do echo "%%~nxa"
Автор: quaka
Дата сообщения: 12.04.2009 22:15
01MDM
Спасибо! Вроде показалось, что я всё понял, но вот возникла загвоздка.
А как быть если наоборот?

Делаю tracert до маил.ру(опять же всё выводится в файл out.txt), как мне взять IPадрес , например первого хопа(tracert mail.ru) и сделать пинг по этому адресу?

И ещё, если не сложно посоветуй или дай ссылку на что нить толковое почитать по "tokens"))
Автор: 01MDM
Дата сообщения: 12.04.2009 23:28
quaka


Цитата:
как мне взять IPадрес , например первого хопа(tracert mail.ru) и сделать пинг по этому адресу?


Если брать первый "хоп", то:

Код:
@echo off

tracert -h 3 mail.ru 1>out.txt
for /f "tokens=2 delims=[]" %%i in ('findstr "\<[0-9]\>" out.txt') do (
ping %%i
goto:eof
)
Автор: batniki
Дата сообщения: 12.04.2009 23:37
Народ помогите пожалуйста на предыдущей странице спрашивал...
Просто очень срочно нужно для публичного релиза рескью-диска.
Автор: vu1tur
Дата сообщения: 12.04.2009 23:42
batniki

Код:
@echo off
set a=23
set /a b=%a% + 1
echo %a% + 1 = %b%
Автор: batniki
Дата сообщения: 12.04.2009 23:51
vu1tur, спасибо. Как сделать что-то типа этого %s%%b%% есть переменная s24 которая содержит текст, чтобы её вывести.
Автор: sas1111
Дата сообщения: 12.04.2009 23:56

.


Уточняю по зтой задачке
1.
- имеется файл Dannie.DAT
нужно прочесть ЗНАЧЕНИЕ (до 8 байт) находящееся в адресах <смещение и байт начало>до<смещение и байт конца>. занести считанное значение в File1.dat , перевести значение в 10-тичное и записать в File2.TXT. Адреса и имена передаются как параметры при запуске.
типа <файл данных> <начало> <конец значения> File1.dat File2.txt

xxx.bat Dannie.dat 00001053 0000105А File1.dat File2.txt


2.
Если можно и пример обратного варианта.
Имена файлов оставлю по аналогии с первым вопросом
File1.dat - двоичное значение
File2.TXT - десятичное значение
Dannie.dat - сюда записываем данные
D -параметр -десятичное значение . H-двоичное значение данных в файле FileX.dat
-типа-
yyy.bat Dannie.dat 0000EE53 0000EE5А File1.dat H
или
yyy.bat Dannie.dat 0000DF4F 0000DF56 File2.txt D

-_-_-_-_-_-_-_-_-_

За раннее с Благодарностью.!!.



.


Автор: quaka
Дата сообщения: 13.04.2009 00:35
01MDM
Так как ты написал получается, что пингуется третий хоп, а если нужен другой на пример первый то как быть?
Автор: 01MDM
Дата сообщения: 13.04.2009 07:38
quaka

Цитата:
Так как ты написал получается, что пингуется третий хоп


У меня пингуется пингуется первый хоп из таблицы трассировки (тот, что первый в текстовом файле), заголовок не обрабатывается.
Автор: stepplers
Дата сообщения: 13.04.2009 10:53
Уважаемые, подскажите, что неправильно в написании cmd файла? Хочу запустить вторую копию µTorrent_a:

echo off
"%Programfiles%\torrent\uTorrent.exe /recover"
echo torrent finished.

Пишет "Неверно задано имя папки." В Тотале с коммандной строки запускается... Как правильно записать cmd файл. что-бы запускались обе копии:

echo off
"%Programfiles%\utorrent\uTorrent.exe"
"%Programfiles%\torrent\uTorrent.exe /recover"
echo torrent finished.

Первая копия запускается и cmd-файл останавливается.
Папки разные...
Автор: Nagual
Дата сообщения: 13.04.2009 11:10
stepplers
примерно так
Код:
echo off
start "" "%Programfiles%\utorrent\uTorrent.exe"
start "" "%Programfiles%\torrent\uTorrent.exe" /recover
echo torrent finished.
Автор: AnGo
Дата сообщения: 13.04.2009 12:07
Maza_Faka
Попробовал. Результат прежний-виснет после двух десятков выполнений.
Проверил в шестнадцатеричном редакторе на предмет каких-либо левых не отображаемых символов - всё в порядке
Но если перенаправить вывод в файл, то работает.

Цитата:
echo Working >> mes.log
echo %TIME% >> mes/log

По крайней мере, ночь отработала без проблем.
Попробовал несколько модифицировать код, как-то не нравиться мне, что висит черное окно без вывода и не ясно, работает или потихоньку висит . Так вот попробовал так

Код:
echo Working >> mes.log
echo %TIME% >> mes.log
echo %TIME%
Автор: quaka
Дата сообщения: 13.04.2009 13:20
01MDM
Давай сравним таблицы))
Вот такая таблица и пингуется "92.255.81.1", покажешь свою?)

C:\Documents and Settings\Администратор>tracert -h 3 mail.ru

Трассировка маршрута к mail.ru [194.67.57.226]
с максимальным числом прыжков 3:

1 81 ms 3 ms 199 ms 10.5.9.254
2 19 ms 2 ms 147 ms 10.5.9.254
3 171 ms 1 ms 9 ms p1.vsevnet.ru [92.255.81.1]

Трассировка завершена.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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