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

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

Автор: res2001
Дата сообщения: 07.06.2011 09:05
NskRonin
Как-то так

Код: @echo off
for /f "tokens=*" %%a in (iplist.txt) do (
set "res="
1>nul 2>&1 ping -n 2 %%a && set "res=1"
if defined res (
echo Пинг до %%a прошел
) else (
echo Пинг до %%a не прошел
))
Автор: NskRonin
Дата сообщения: 07.06.2011 09:28
res2001

Спасибо. Я его не много переделал.

@echo off
for /f "tokens=*" %%a in (complist.txt) do (
set "res="
1>nul 2>&1 ping -n 2 %%a && set "res=1"
if defined res (
echo ping to [ %%a ] OK!
) else (
echo ping to [ %%a ] off.
))

pause
Автор: res2001
Дата сообщения: 07.06.2011 10:56
ashum
Можно попробовать выдергивать sedом информацию (sed отдельная утилита, ссылка есть в шапке), но в твоем примере есть 2 вхождения обоих тегов, видимо может быть не только 2, как реализовать это на sede я не в курсах.
Может тут кто подскажет, кто в sedе волокет.

По использованию парсера из VBS могу дать пример использования, в своё время делал на VBA скрипт загрузки xml файлов в эксельные таблицы. Язык в екселе тот же vbs, разницы почти никакой.

Код: Set oxml = CreateObject("Microsoft.XMLDOM")
oxml.async = False
oxml.Load (file.xml)
If oxml.parseError.errorCode <> 0 Then
oxml.Close
Exit Sub
End If
Set zap = oxml.getElementsByTagName("Zapros")
For i = 0 To zap.Length - 1
sh.Cells(j, 1) = i + 1
sh.Cells(j, 2) = zap.Item(i).getElementsByTagName("Surname").Item(0).Text
sh.Cells(j, 3) = zap.Item(i).getElementsByTagName("Name").Item(0).Text
sh.Cells(j, 4) = zap.Item(i).getElementsByTagName("Secondname").Item(0).Text
j = j + 1
Next
Автор: wolf0425
Дата сообщения: 07.06.2011 13:27

Цитата:
Надо вытащить значения NAME и ARTIST и вывести их в файл в виде NAME - ARTIST.
для данного слитого в одну строку примера сойдет так:

Код: @echo off
chcp 1251
sed -r "s;(</ARTIST>);\1\n;gi" file.in | sed -n -r "s;^.*<NAME>([^<]*)</NAME><ARTIST>([^<]*)</ARTIST>.*$;\1 - \2;gip" >file.out
Автор: ashum
Дата сообщения: 07.06.2011 13:35
res2001
Спасибо! Батник парсит из xml две строчки в txt, т.к. name и artist встречаются два раза. Но потом программа забирает из текстового файла только первую строчку. Так что, в итоге все работает как надо! )))

Добавлено:
А как теперь добавить условие "если поле TYPE имеет значение M, парсить файл, а если пустое, то выход"?
Автор: wolf0425
Дата сообщения: 07.06.2011 14:20

Цитата:
если поле TYPE имеет значение M, парсить файл, а если пустое, то выход"?
а если встречается дважды, с разными значениями, как в примере выше?
Автор: Alexey87
Дата сообщения: 07.06.2011 14:32
01MDM

Цитата:
В чем заключается проверка?

суть проверки в том, что если в Windows есть ассоциация с pdf-файлом, то и открывался бы этот файл по ассоциации или если же ассоциации нет, то pdf-файл должен открываться в FoxitPDFreader_4.1.1.exe, который находится на компакт-диске.
Автор: ashum
Дата сообщения: 07.06.2011 14:36

Цитата:
а если встречается дважды

то брать только первое вхождение
Автор: res2001
Дата сообщения: 07.06.2011 14:55
wolf0425
Чувствовал, что это можно седом сделать, но мозгов не хватило сваять соответствующий регэксп.
По любому для работы с xml связка vbs/js + xmldom будет правильнее и универсальней, потому сразу ее и предлагал.


Добавлено:
ashum

Цитата:
А как теперь добавить условие "если поле TYPE имеет значение M, парсить файл, а если пустое, то выход"?

В варианте wolf0425 добавь в регэксп по аналогии тэг <TYPE>, а потом батником разобрать вывод.


Добавлено:
вот так:

Код: @echo off
>nul chcp 1251
for /f "tokens=1-3 delims=-" %%a in ('sed -r "s;(</ARTIST>);\1\n;gi" 111.xml ^| sed -n -r "s;^.*<TYPE>([^<]*)</TYPE><NAME>([^<]*)</NAME><ARTIST>([^<]*)</ARTIST>.*$;\1-\2-\3;gip" ') do     if "%%a" equ "М" echo %%b - %%c
Автор: 1275
Дата сообщения: 07.06.2011 15:32
Всем привет.
нужна помощь по решению задачи.

Задача:
Создать батник который выводит содержимое файла. Имя файла - параметр.

Чем помочь: мне нужно объяснить как лучше довести до ума переадресацию на файл уже существующей стандартной команды type


Код:
call C:\Windows\System32\typeperf


что в нем не правильно и что еще нужно дописать помогите пожалуйста



Заранее спасибо!

Автор: Free_Soft
Дата сообщения: 07.06.2011 16:11
1275

Код: C:\Windows\System32\typeperf
Автор: 01MDM
Дата сообщения: 07.06.2011 16:13
Alexey87

Цитата:
суть проверки в том, что если в Windows есть ассоциация с pdf-файлом, то и открывался бы этот файл по ассоциации или если же ассоциации нет, то pdf-файл должен открываться в FoxitPDFreader_4.1.1.exe, который находится на компакт-диске.

А что мой предыдущий пример не работает? Там только подправить пути и исправить название исполняемого файла.
Автор: 1275
Дата сообщения: 07.06.2011 18:31
Free_Soft
большое спасибо
а не могли бы пояснить что дает %1 и для чего он????
Автор: Alexey87
Дата сообщения: 07.06.2011 19:02
01MDM

Цитата:
А что мой предыдущий пример не работает?

работает на открытие FoxitPDFreader, а хотелось бы чтобы, при открытии любого pdf-файла (их на диске около 50, я уже писал) запускалась программа уже проассоциированная в Windows на формат pdf или если же ассоциации нет, то pdf-файл должен открываться в FoxitPDFreader_4.1.1.exe, который находится на компакт-диске.
Автор: 01MDM
Дата сообщения: 07.06.2011 19:23
Alexey87
А как ты открываешь файлы? Надо либо из командной строки в качестве параметра к батнику использовать нужный pdf, либо в проводнике перетаскивать файл на батник. Иначе никак.

Или устанавливать новую ассоциацию, но это вмешательство в реестр, а для программы на съемном носителе этого делать на мой взгляд не стоит.
Автор: Alexey87
Дата сообщения: 07.06.2011 20:02
01MDM, а ни как нельзя сделать так, чтобы при открытии pdf-файла определялось в какой программе запускать его - программа с ассоциацией pdf в Windows или FoxitPDFreader
Автор: Free_Soft
Дата сообщения: 07.06.2011 20:14
1275
%1 - первый параметр запуска батника, %2 - 2-й и т.д.
Автор: 01MDM
Дата сообщения: 07.06.2011 20:18
Alexey87
Из проводника? Нет, наверное нельзя. Для этого необходимо назначить новую ассоциацию. Если компьютер чужой, то это не лучший выход, т.к. ее потом надо как-то удалить.
Автор: Yabuce
Дата сообщения: 08.06.2011 01:41
Уважаемые программисты, помогите доработать батник чтобы мог массово добавлять файлы в архивы:


Код: FOR /R %%a IN (*.mp3) DO ( "C:\Program Files (x86)\WinRAR\Rar.exe" a -inul -ep -m3 -zcomment.txt -av "%%a".rar "%%a" )

pause
Автор: FantoMax22
Дата сообщения: 08.06.2011 03:17
Всех приветствую!

Помогите создать .bat-файл следующего характера:

Нужно в AD, в определённой OU создать пользователя, скажем "Tester" с заданным паролем (Password123). При создании задаётся только Имя-Полное_имя и Имя входа пользователя. Инициалы и фамилия не нужны. Атрибуты указываются только "Запретить смену пароля пользователем" и "Срок действия пароля не ограничен". Галку "Требовать смены пароля при следующем входе в систему" соответственно нужно убрать.
После создания пользователя его необходимо добавить в определённую группу AD и сменить пароль на аналогичный его имени. То есть сменить прежний пароль пользователя "Tester" с "Password123" на пароль "Tester".

При создании нужно использовать команду dsadd

С уважением!
Автор: res2001
Дата сообщения: 08.06.2011 07:40
Yabuce
Ну и добавь к команде архивации путь к этой папке в конце. Вообще какой смысл архивировать mp3 файлы? Они ж не жмутся практически.
Автор: Plexus1981
Дата сообщения: 08.06.2011 08:45
Здравствуйте, дайте пожалуйста пример использования консоли rar.exe для архивации файлов по частям? перепробовал уйму вариантов...ну не хочет он разбивать архив на тома и все тут!!! надо чтобы том вмещался на DVD-диск.

Вот как я пробую батником:
dir /B /s "E:\EOD04\*.*"> c:\list2.txt
for /F "delims=" %%i in (c:\list2.txt) do rar a -v4481M E:\Archives\SEOD_DB0404.rar "%%i"

почему то создает один архив и всё!
Заранее благодарен за помощь!
Автор: res2001
Дата сообщения: 08.06.2011 08:56
Plexus1981
Полагаю, что эта проблемма возникает из-за того, что в каталоге несколько файлов и рар запускается отдельно для каждого файла. Видимо он в этом случае не может определить размер архива правильно. Не знаю почему
Упаковывай сразу оптом вот так:
rar a -v4481M -r E:\Archives\SEOD_DB0404.rar E:\EOD04\*.*

Автор: king_stiven
Дата сообщения: 08.06.2011 10:27
Требуется постоянно отслеживать состояние Adsl Router а на подключение интернета, как интернет пропал, нужен сигнал. Не пинговать а что то более постоянное.
Автор: Yabuce
Дата сообщения: 08.06.2011 10:27
res2001,
Дайте, пожалуйста, пример кода, сделал как понял:


Код: FOR /R %%a IN (*.mp3) DO ( "C:\Program Files (x86)\WinRAR\Rar.exe" a -inul -ep -m3 -zcomment.txt -av "%%a".rar "%%a" C:\test\Прочти меня )

pause
Автор: king_stiven
Дата сообщения: 08.06.2011 10:28
Yabuce
FOR /R %%a IN (*.mp3) DO ('"C:\Program Files (x86)\WinRAR\Rar.exe" a -inul -ep -m3 -zcomment.txt -av "%%a".rar "%%a" C:\test\Прочти меня')
Автор: Plexus1981
Дата сообщения: 08.06.2011 10:28
res2001, спасибо за совет! =) Как то упустил из виду что каждый файл отдельно обрабатывается, причина именно в этом ! =)
Автор: Yabuce
Дата сообщения: 08.06.2011 10:41

Цитата:
FOR /R %%a IN (*.mp3) DO ('"C:\Program Files (x86)\WinRAR\Rar.exe" a -inul -ep -m3 -zcomment.txt -av "%%a".rar "%%a" C:\test\Прочти меня')


king_stiven, у меня пишет: Синтаксическая ошибка в имени файла, имени папки или метке тома.
Автор: ashum
Дата сообщения: 08.06.2011 10:44
res2001
wolf0425
Спасибо большое! Работает просто отлично! )
Автор: res2001
Дата сообщения: 08.06.2011 11:04
Yabuce
FOR /R %%a IN (*.mp3) DO "C:\Program Files (x86)\WinRAR\Rar.exe" a -inul -ep -m3 -zcomment.txt -av "%%a".rar "%%a" "C:\test\Прочти меня"
Путь до папки Прочти меня пропиши свой.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

Предыдущая тема: зависает установка Windows XP: 39 минут


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