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

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

Автор: KapralBel
Дата сообщения: 27.07.2007 22:02
JohnRD
В общем только получение имени нового файла

Код: @Echo Off
Set num=1
For /L %%a In (1,1,111) Do Call :ex %%a
:NewFile
Set NewFile=c:\new\backup%num%.gho
Echo %NewFile%

GoTo :EOF

:Ex
Set nu=000%1
Set nu=%nu:~-3%
If Not %Num%==1 GoTo :EOF
If Exist c:\new\backup%nu%.gho GoTo :EOF
Set num=%nu%
GoTo :EOF
Автор: JohnRD
Дата сообщения: 28.07.2007 14:48
KapralBel

чтобы не было в паке всегда на выходе это
C:\new>1.cmd
c:\new\backup01 .gho
Автор: KapralBel
Дата сообщения: 28.07.2007 20:31
JohnRD
Ты концевые пробелы в батнике удалял?
Автор: MsdLamer
Дата сообщения: 28.07.2007 22:42
Можно ли с помощью bat файла в текстовом файле вырезать или скопировать определенный кусок текста и вывести все это в отдельном файле?
И как реализовать подскажите пожалуйста.
Автор: uZver
Дата сообщения: 28.07.2007 23:40

Цитата:
в текстовом файле вырезать или скопировать определенный кусок текста

Если номера строк и их кол-во известны то см. FOR /?, а именно параметры skip и tokens

А если не известны , то тоже смотри FOR /?, но уже тщательнее )
Автор: 01MDM
Дата сообщения: 29.07.2007 07:30
MsdLamer

Цитата:
И как реализовать подскажите пожалуйста


Решения для одного случая могут не подойти в другом. Нет конкретики. Вот здесь можно найти много полезного:

Код:
hh ntcmds.chm
Автор: MsdLamer
Дата сообщения: 29.07.2007 08:29
уточняю. Кпримеру есть строки:

Крыльями белоснежными
Душу мою мятежную
Бережно, ангел, укрой.
Пеньем её успокой.
Страсти её усмири,
Нежной её назови.
Очень устала она
Без долгожданного сна.
Отдых там ждёт под покровом
Скрыта нетленным альковом...
Будет тихонько дремать
Мне перестав докучать.

и допустим мне надо начиная со строки "Страсти её усмири," (включая эту строку) и заканчивая "Будет тихонько дремать" (так же включая эту строку) вывести в новый файл new.txt. Подскажите пожалуйста на примере.
Автор: Tipulatoid
Дата сообщения: 29.07.2007 09:45
MsdLamer

Код: @echo off
setlocal enabledelayedexpansion
set count=0
for /f "skip=4 tokens=*" %%a in (poem.txt) do (
set /a count=!count!+1
if /i !count! leq 7 echo %%a>>new.txt
)
Автор: MsdLamer
Дата сообщения: 29.07.2007 10:06
Хорошо, спасибо, работает. И еще маленький вопросик, а если к примеру я не знаю сколько строчек сверху и сколько снизу, между тем текстом который я хочу вывести в файл, как быть? Может быть как-то по содержимому строки первой и последней строки?
Автор: Tipulatoid
Дата сообщения: 29.07.2007 10:22
Тогда так

Код: @echo off
setlocal enabledelayedexpansion
set file=poem.txt
for /f "skip=1 delims=[]" %%a in ('find /n "Страсти её усмири," %file%') do set start=%%a
for /f "skip=1 delims=[]" %%a in ('find /n "Будет тихонько дремать" %file%') do set end=%%a
set /a start=%start%-1
set /a end=%end%-%start%
set count=0
for /f "skip=%start% tokens=*" %%a in (%file%) do (
set /a count=!count!+1
if /i !count! leq %end% echo %%a>>new.txt
)
Автор: MsdLamer
Дата сообщения: 29.07.2007 10:32

Цитата:
@echo off
setlocal enabledelayedexpansion
set file=poem.txt
for /f "skip=1 delims=[]" %%a in ('find /n "Страсти её усмири," %file%') do set start=%%a
for /f "skip=1 delims=[]" %%a in ('find /n "Будет тихонько дремать" %file%') do set end=%%a
set /a start=%start%-1
set /a end=%end%-%start%
set count=0
for /f "skip=%start% tokens=*" %%a in (%file%) do (
set /a count=!count!+1
if /i !count! leq %end% echo %%a>>new.txt
)


пишет Страсти её усмири, - файл не найден. Что делать?
Автор: 01MDM
Дата сообщения: 29.07.2007 10:42
MsdLamer
Все проще:

Код:
@ECHO OFF
setlocal enabledelayedexpansion
set /a count=0
for /f "delims=" %%i in ('type poem.txt') do (
    set string=%%i
    if "!string!"=="Страсти её усмири," goto:next
    set /a count+=1
)
:next
for /f "skip=%count% delims=" %%i in ('type poem.txt') do (
    set string=%%i
    echo !string! >>new.txt
    if "!string!"=="Будет тихонько дремать" goto:eof
    )
Автор: Tipulatoid
Дата сообщения: 29.07.2007 11:02
MsdLamer

Цитата:
пишет Страсти её усмири, - файл не найден. Что делать?

Черт его знает У меня все работает. Ты когда с форума копировал код, пробелы в конце строк удалил? И еще - в какой кодировке стихотворение?
Автор: MsdLamer
Дата сообщения: 29.07.2007 11:10
спасибочки вот этот вариант то что надо.
Автор: Maza Faka
Дата сообщения: 29.07.2007 12:09
MsdLamer
Ещё один вариант, без подсчёта строк:

Код:
@echo off

for /f "delims=" %%a in (test.txt) do (
echo %%a | findstr /c:"Страсти её усмири">nul
if not errorlevel 1 set flag=yes
echo %%a | findstr /c:"Будет тихонько дремать">nul
if not errorlevel 1 (
set flag=
echo %%a>> out.txt)
if defined flag echo %%a>> out.txt
)
Автор: JohnRD
Дата сообщения: 29.07.2007 12:38
KapralBel
Вы правы - пробелы
спасибо

так вроде работает в цикле, каждый раз с новым именем файла,
правильно ли я это сделал ??

Код:
@Echo Off
:LOOP
Set num=1
For /L %%a In (1,1,111) Do Call :ex %%a
:NewFile --- для чего эта метка? убрать?
Set NewFile=c:\new\backup%num%.gho
Echo %NewFile%
GhostSrv.exe c:\new\%NewFile% backup -D -C
GoTo :LOOP

:Ex
Set nu=000%1
Set nu=%nu:~-3%
If Not %Num%==1 GoTo :EOF
If Exist c:\new\backup%nu%.gho GoTo :EOF
Set num=%nu%
GoTo :EOF
Автор: Nagual
Дата сообщения: 29.07.2007 14:59
мужики, а обратная задача решаема?
то есть удалить блок текста, начинающийся с одной строки, заканчивающийся другой строкой и запись результата в новый файл
Автор: 01MDM
Дата сообщения: 29.07.2007 15:39
Nagual

На том же примере

Код:
@ECHO OFF
setlocal enabledelayedexpansion

for /f "delims=" %%i in ('type poem.txt') do (
set string=%%i
if "!string!"=="Страсти её усмири," goto:next
echo !string! >>new.txt
)
:next
set /a count=0
for /f "delims=" %%i in ('type poem.txt') do (
set string=%%i
if "!string!"=="Отдых там ждёт под покровом" goto:res
set /a count+=1
)
:res
for /f "skip=%count% delims=" %%i in ('type poem.txt') do (
set string=%%i
echo !string! >>new.txt
)

Автор: Maza Faka
Дата сообщения: 29.07.2007 17:43
Nagual

Код:
@echo off
for /f "delims=" %%a in (test.txt) do (
echo %%a | findstr /c:"Страсти её усмири">nul
if not errorlevel 1 set flag=yes
echo %%a | findstr /c:"Будет тихонько дремать">nul
if not errorlevel 1 set flag=
if not defined flag echo %%a>> out.txt
)
Автор: hacsoft
Дата сообщения: 29.07.2007 18:05
Организация цикла с условием

Задача: создать цикл с условием (типа while)

Очевидный вариант решения (перекочевывает из Basic):

Код: :loop
<операции1>
if <условие> <выход>
<операции2>
goto loop
Автор: Tipulatoid
Дата сообщения: 29.07.2007 18:12
Nagual

Код: @echo off
setlocal enabledelayedexpansion
set file=poem.txt
for /f "skip=1 delims=[]" %%a in ('find /n "Страсти её усмири," %file%') do set start=%%a
for /f "skip=1 delims=[]" %%a in ('find /n "Будет тихонько дремать" %file%') do set end=%%a
set count=0
for /f "tokens=*" %%a in (%file%) do (
set /a count=!count!+1
if /i !count! lss %start% echo %%a>>new.txt
if /i !count! gtr %end% echo %%a>>new.txt
)
Автор: Elroir
Дата сообщения: 29.07.2007 20:20
hacsoft
Давно тебя не было видно

Цитата:
Пробовал ... Не работает

Очень странно, что не работает. У меня работает следующая конструкция:

Код:
@echo off
for /l %%a in (0,1,20) do (
echo %%a
if %%a==10 goto end
echo %%a
)
:end
Автор: hacsoft
Дата сообщения: 29.07.2007 22:20
Странно, что в случае с FOR происходит такое же зависание, если вместо goto указать EXIT /B.
А если указать просто EXIT - батник захлопнется.
Какие еще варианты прерывания цикла можно придумать?
Автор: dSasha
Дата сообщения: 30.07.2007 00:23
Проблема: есть выход в интернет по мобильнику и доступ на несколько адресов бесплатно по диал-ап. В этой теме нашел, как добавлять маршруты bat-файлом. Всё бы хорошо, только часто рвётся диал-ап соединение. И, хотя и стоит галка "Перезвонить при разрыве связи", и перезванивает, но если я этого не заметил и не запустил bat-ник после этого, трафик идёт через основной шлюз и снимает деньги с мобильного счёта.

Надо: чтобы после переподключения bat-ник запускался автоматически.

Если где-то есть готовый ответ - не ругайте, и так пока искал намотал дорогущего трафика. Дайте, пожалуйста, подсказку или ссылку. Заранее спасибо.
Автор: Nagual
Дата сообщения: 30.07.2007 03:13
Наиболее быстро и относительно корректно сработал этот код
test.cmd
Код: @echo off
setlocal enabledelayedexpansion
set input=
set output=
if exist %output% del %output%

for /f "delims=" %%i in ('more/p/s "%input%"') do (
set string=%%i
if "!string!"=="строка_начала" goto:next
echo !string!>>%output%
)
:next
set /a count=0
for /f "delims=" %%i in ('more/p/s "%input%"') do (
set string=%%i
if "!string!"=="строка_окончания" goto:res
set /a count+=1
)
:res
for /f "skip=%count% delims=" %%i in ('more/p/s "%input%"') do (
set string=%%i
echo !string!>>%output%
)
Автор: Maza Faka
Дата сообщения: 30.07.2007 07:08
Nagual
У тебя в коде каждая строка сравнивается со
Цитата:
строка_начала
и
Цитата:
строка_окончания
, поэтому батник работает медленно. И вообще, код немного неудачно написан (с точки зрения производительности), два перехода по метке существенно замедляют работу батника.
Тебе нужно выдрать блок строк из файла? Приведи фрагмент файла.

P.S. Я приводил пример: http://forum.ru-board.com/topic.cgi?forum=62&topic=10650&start=1320#21 нужно просто немного переделать под свою задачу.
Автор: VASTERIKS
Дата сообщения: 30.07.2007 09:55
Вопрос мой остался без внимания. Разве это не решаемая задача


Цитата:
Доброго времени суток.

Итак, необходимо с известной папки собрать логи в архив и отправить на известный адрес для обработки!

Все рабочие файлы для этой задачи лежат в папке на флэшке. Флэшка передаётся юзеру, тот запускает один файл и работает себе дальше...

Вот что получилось :

start.bat


Код: Код:@echo off
start rar a -ep1 -y -hp123 arhlog "%programfiles%\prog\logdir\*.txt"
cmd /C send.bat


send.bat


Код: Код:blat -to mylo@mail.ru -attach arhlog.rar
Автор: KapralBel
Дата сообщения: 30.07.2007 10:00
VASTERIKS
Если руками запустить
blat -to mylo@mail.ru -attach arhlog.rar
Срабатывает?
Автор: VASTERIKS
Дата сообщения: 30.07.2007 10:09
Нет. Я так пробовал. Наверное что то с Blat-ом. Так записывается когда в реестр занесены сведения на ящик. А мне скорее надо чтобы сведения в файле были. Чтобы не заносить в реестр каждой машины данные ящика

Добавлено:
Вот нашёл http://www.blat.net/syntax/syntax.html но чего то не получатся
Автор: KapralBel
Дата сообщения: 30.07.2007 10:26
VASTERIKS
Скачай http://download.dataenter.co.at/ftp/demk/smtpsend.zip (~800kb)

Код: SMTPSend -tmylo@mail.ru -fFrom@Email.Ru -hLocalhost -aarhlog.rar

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

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


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