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

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

Автор: 01MDM
Дата сообщения: 30.04.2011 23:15
ASE_DAG
Прокатит. Но если есть всякие вложенные теги и все это без какой-то системы, то тут два выхода -- либо выдергивать с помощью sed определенный адрес ( \1 к примеру ) или считать токены в цикле for
Что-нибудь а-ля:

Код:
sed -n "s/<h[1-6].*>\(.*\)<h[1-6]>/\1/"
Автор: ASE_DAG
Дата сообщения: 30.04.2011 23:50
01MDM
> s/<h[1-6].*>\(.*\)<h[1-6]>/\1/
Не-не-не, так нельзя. Сед работает в жадном режиме, и в ленивом не умеет.
Да и вообще, этим выражением будет сделана не выборка субстрок, а не пойми что (не забывайте, что от <h1> до </h1> — это едва ли вся строка, скорее всего часть строки).
Еще раз повторю, что Седом выборку субстрок лучше вообще не делать.

Да, а вложенные тэги — это проблема, но в заголовках они редко есть, хотя вполне могут быть. Пойду почитаю ман по Грепу, возможно он и умеет ленивые регэкспы, я, честно говоря, не помню. :)

Добавлено:
Да, умеет, в режиме --perl-regexp (-P):

$ grep -Po '<h[1-6].*?>.*?</h[1-6]>' file.html

Вот славно, вложенные тэги — уже не проблема.
Автор: ndch
Дата сообщения: 01.05.2011 00:12
задача: генерировать десятичный цифры в диапазоне от 1 до %i
в формате 0003 (в диапазоне от 0 до 9999) и формате как есть >9999

т.е. например[more]0001
0002
..
9999
10000
10001
..
17964[/more]

%i может быть в диапазоне от 1 до 49216

сначала думал использовать for. в разбегу не подходит.
for такое вообще умеет ?

oc:xp
Автор: ASE_DAG
Дата сообщения: 01.05.2011 01:04
ndch
printf (любой, в т.ч. и стэндалоун из ГНУ Коръютилз) точно умеет.

$ printf '%04.0f\n' 10
0010

Автор: NIKZZZZ
Дата сообщения: 01.05.2011 01:22
ndch

Код: echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,49216) do (
set x=%%a
if !x! lss 10000 (
set x=000!x!
set x=!x:~-4!
)
echo !x!
)
Автор: 01MDM
Дата сообщения: 01.05.2011 06:36
ASE_DAG

Цитата:
Не-не-не, так нельзя.

Это было не решение, я даже не проверял, а просто предположение.
Автор: ndch
Дата сообщения: 01.05.2011 08:29
NIKZZZZ
так не получается:[more]01
2
3
4
5
6
7
8
9
10
11
12
13
[/more]

Добавлено:
ASE_DAG

Цитата:
printf (любой, в т.ч. и стэндалоун из ГНУ Коръютилз) точно умеет.

$ printf '%04.0f\n' 10
0010



Код: C:\>printf '%04.0f\n' 10
'-000
'
Автор: 01MDM
Дата сообщения: 01.05.2011 09:04
ndch

Код:
@echo off
setlocal enabledelayedexpansion

for /l %%i in (1,1011,49216) do (

set "num=0000%%i"
if %%i leq 9999 ( echo !num:~-4! ) else ( echo !num:~-5! )

)
Автор: NIKZZZZ
Дата сообщения: 01.05.2011 09:18
ndch

Цитата:
так не получается

Скорее всего при копировании добавились пробелы.


Код: echo off
setlocal enabledelayedexpansion
for /l %%a in (1,1,49216) do (
set "x=%%a"
if !x! lss 10000 (
set "x=000!x!"
set "x=!x:~-4!"
)
echo !x!
)
Автор: ndch
Дата сообщения: 01.05.2011 09:58
NIKZZZZ

Цитата:
Скорее всего при копировании добавились пробелы.

точно. затупил.
Автор: Alexey87
Дата сообщения: 01.05.2011 11:53
01MDM, все равно не получается.
Может есть еще какие-нибудь варианты или код некорректен?
Автор: 01MDM
Дата сообщения: 01.05.2011 13:06
Alexey87

Цитата:
Большинство заголовков имеют вид <h1 id="fav_name_1" class="news_item_header">some title</h1>

Попробуй такой вариант:

Код:
@echo off
setlocal

pushd "c:\html"
for %%i in (*.html) do call:parse "%%i"
popd
goto:eof

:parse
for /f "tokens=1 delims=/" %%i in (' findstr "h[1-6]" %1 ') do set "h=%%i"
set "h=%h:<=","%"
set "h=%h:>=","%"

for %%i in ( "%h:~0,-3%" ) do set "title=%%~i"
echo %title%
Автор: Alexey87
Дата сообщения: 01.05.2011 13:54
01MDM, что-то заработало!
Текст вывелся в окне bat-файла, но русские слова иероглифами (видимо нужно изменить вывод кодировки).
Как это исправить и как вообще скопировать текст из окна bat-файла?
Автор: Bezzz
Дата сообщения: 01.05.2011 14:11

Цитата:
Текст вывелся в окне bat-файла, но русские слова иероглифами (видимо нужно изменить вывод кодировки).
Как это исправить и как вообще скопировать текст из окна bat-файла?


Код: chcp /?
Автор: 01MDM
Дата сообщения: 01.05.2011 14:12
Alexey87,
А в какой кодировке хтмл?
Автор: Alexey87
Дата сообщения: 01.05.2011 14:31
Bezzz, русские слова написаны русскими буквами, но бессмыслено.
Например в заголовке написано "обновление", а в bat-файле "сэютыхэшх"

01MDM

Цитата:
А в какой кодировке хтмл?

windows-1251
Автор: Bezzz
Дата сообщения: 01.05.2011 14:43

Цитата:
русские слова написаны русскими буквами, но бессмыслено.

Где именно написаны?

Цитата:
Например в заголовке написано "обновление", а в bat-файле "сэютыхэшх"

Все правильно.
"обновление" в кодовой странице 1251 будет "юсэютыхэшк" в кодовой странице 866
Автор: Alexey87
Дата сообщения: 01.05.2011 15:10
Bezzz, как быть? что дальше делать?
как хоть скопировать текст из окна bat-файла
Автор: Bezzz
Дата сообщения: 01.05.2011 15:22
Alexey87
Я для перекодировки использую sed
Зачем копировать текст из окна батника? Используйте перенаправление вывода
echo Test - выведет Test в окно консоли
echo Test > c:\out.txt выведет Test в файл c:\out.txt В окне консоли вывода не будет. Прежнее содержимое c:\out.txt будет уничтожено.
echo Test >> c:\out.txt выведет Test в файл c:\out.txt В окне консоли вывода не будет. Test будет добавлен в конец файла c:\out.txt
Автор: 01MDM
Дата сообщения: 01.05.2011 16:25
Alexey87
Добавь команду chcp в батник:

Код:
@echo off
1>nul chcp 1251
....
Автор: Alexey87
Дата сообщения: 01.05.2011 16:49
01MDM, большое спасибо!
Все работает.
Есть нюанс: а можно ли сделать так, чтобы в файл извлекались все заголовки, если их в html-документе несколько?
Автор: fram
Дата сообщения: 01.05.2011 16:53
Здравствуйте

Для регистрации софта необходимо выполнить конкретное количество(за тридцать) цыклов в register.bat файле:
1) слияние регфайла (конкретное количество(за тридцать) регфайлов) с реестром,
2) запуск аппликации, которое нужно регистрировать.
3) полное завершение работы аппликации, которое нужно регистрировать.

и так конкретное количество(за тридцать) цыклов.

Как лучше сделать(x86 и x64)?

P.S.
Подразумеваю [more]echo off
if "%ProgramW6432%" equ "" (
    echo x86
    regedit /s 0.reg
    start myapp.exe
    taskkill /f /im myapp.exe /t
) else (
    echo x64
    %WINDIR%\Sysnative\reg /s 0.reg
    start myapp.exe
    taskkill /f /im myapp.exe /t
)
exit


Регфайлов в папке конкретное количество(за тридцать).
В названии регфайлов только одна цифра или буква.
Надо повторить цыкл конкретное количество(за тридцать).


Только вот не поднимается myapp.exe

Заранее благодарен за ответ

[/more]
Автор: Bezzz
Дата сообщения: 01.05.2011 16:58

Цитата:
а можно ли сделать так, чтобы в файл извлекались все заголовки, если их в html-документе несколько?

Всё можно сделать.
Какие именно заголовки?


Добавлено:
fram Начнем с того, то цИклов...

Автор: Alexey87
Дата сообщения: 01.05.2011 17:03
Bezzz, заголовков в некоторых html-документах несколько (тег <h1>)
Автор: fram
Дата сообщения: 01.05.2011 17:26
Bezzz

Для успешной регистрации необходимо сочетание слияние регфайла с реестром и запуск myapp.exe

Регфайлов за тридцать. Если с конкретным регфайлом не запустить myapp.exe, то даже при совпадении сочетания регфайла(их за тридцать) и myapp.exe регистрация не произойдет.
То есть надо прогнать более тридцать раз слияние регфайла с реестром и запуск myapp.exe, только вот регфайлов за тридцать и при каждом надо обязательно запустить myapp.exe.

И так повторить более тридцать раз.


P.S.
Если запуск myapp.exe не произошел, то регистрация не произошла.

Скрин папки [more] [/more]
Автор: res2001
Дата сообщения: 01.05.2011 18:22
fram
Запихни свой батник в цикл по рег файлам, типа такого:

Код: for %%a in (0 1 2 3 4 5 6 7 8 9 a b c ... z) do (
regedit /s %%a.reg
start myapp.exe
>nul ping -n 2 127.0.0.1
taskkill /f /im myapp.exe /t
)
Автор: fram
Дата сообщения: 01.05.2011 18:41
res2001

start myapp.exe

Благодарю, только вот не поднимается myapp.exe.

Это было уже у меня. Потому и обратился в тему.
Может быть я опытами(не этими конешно) и грохнул что то в Windows-е.
Автор: ASE_DAG
Дата сообщения: 01.05.2011 19:37
Alexey87
> а можно ли сделать так, чтобы в файл извлекались все заголовки, если их в html-документе несколько?
А вам таки обязательно надо обойтись без использования софта, отсутствующего в дефолтной поставке Винды?
Автор: Alexey87
Дата сообщения: 01.05.2011 19:40
ASE_DAG, я рассматриваю любые варианты решения моей задачки
Автор: Bezzz
Дата сообщения: 01.05.2011 19:54
fram
Могу только сказать, что всё решаемо.
Это безобразие называется парсер. Я это дело ниасилю. Сорри.

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

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


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