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

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

Автор: Tipulatoid
Дата сообщения: 07.11.2007 08:27
01MDM
Меняется; просто в батнике я ранее определяю сколько строк надо скипать - это не проблема.
Автор: Elroir
Дата сообщения: 07.11.2007 09:09
Tipulatoid
sed умеет выводить текст начиная со строчки такой-то и заканчивая другой.
Аууу! Знатоки sed-a!!!!
Ну ладно - попробую сам:

Код:
sed -n 10,20p file > newfile
Автор: Tipulatoid
Дата сообщения: 07.11.2007 11:20
Elroir
Хотелось бы поменьше сторонних утилит. Поэтому прикручу в свой батник вариант 01MDM На малых аттачах разницы нет практически.
Всем еще раз спасибо за помощь.
Автор: Filosofem
Дата сообщения: 07.11.2007 15:19
как перекодировать вывод программы в другую кодовую страницу?
Ставлю chcp 1251
после этого запускаю скажем robocopy ... \log:log.txt
Лог файл получается всеравно в 866 странице.
То есть кодовая страница консоли влияет только на отображение?
Автор: Elroir
Дата сообщения: 07.11.2007 15:39
Filosofem

Цитата:
как перекодировать вывод программы в другую кодовую страницу?

В шапке, в разделе "Полезные утилиты", утилита xcodewin (внизу).
Автор: 01MDM
Дата сообщения: 07.11.2007 15:44
Filosofem
Столько раз уже обсуждалось..
Два варианта:
1. Использование сторонних утилит (например iconv
2. Вывод "стандартных" утилит в файл

Код:
@echo off
for /f "tokens=*" %%i in ('ping ya.ru') do (call:convert %%i)
goto:eof
:convert
chcp 1251 >nul
echo %*>>1.txt
chcp 866 >nul
Автор: BlackCerber
Дата сообщения: 07.11.2007 19:29
Спасибо хоть на х.... не послали...
Автор: king_stiven
Дата сообщения: 07.11.2007 20:19
BlackCerber
В шапке всё посмотрел?
Автор: BlackCerber
Дата сообщения: 07.11.2007 20:43
Да я уже мануалов тонну перерыл по консольным командам не могу найти
Блина.. там всего строка максимум на 15-20 символов... И что я не сохранил пример
Автор: paveltr
Дата сообщения: 08.11.2007 00:04
king_stiven
Спасибо! Вариант в WinRar отлично работает! Совсем не думал, что он для этой задачи подойдёт

Может кому пригодится. Сделал так:

Код: @echo off
if "%1"=="" echo Usage^: %~nx0 File.mp3 & pause > nul & exit
if not exist %~dp1_%~n1_SPLIT md %~dp1_%~n1_SPLIT
start /wait "" "%programfiles%\winrar\winrar.exe" a -m0 -v3m -inul "%~dp1_%~n1_SPLIT\split.rar" "%1"
for %%a in ("%~dp1_%~n1_SPLIT\*.rar") do ren %%a %%~na.mp3
exit
Автор: Elroir
Дата сообщения: 08.11.2007 00:57
BlackCerber
Создаем пользователя и добавляем его в группу:

Код:
net user adm_user /add
net localgroup Administrators adm_user /add
Автор: GoldAngel
Дата сообщения: 08.11.2007 01:17
1. Вопрос на засыпку:
можно ли установить задержку в "bat" или "cmd" между выполнением команд - например между запуском файлов (в секундах) - допустим 3 секунды?

2. Можно как то убрать отображение пути при выполенинии команды - например:
C:\1111>copy /Y Test.txt "C:\2222\..."
чтобы "C:\1111>" не отображалось вовсе, а была видна лишь сама команда с последующими параметрами.
Автор: Tipulatoid
Дата сообщения: 08.11.2007 02:22
GoldAngel

Цитата:
можно ли установить задержку в "bat" или "cmd" между выполнением команд - например между запуском файлов (в секундах) - допустим 3 секунды?


Код: ping -n 3 -w 1000 localhost > nul
Автор: Elroir
Дата сообщения: 08.11.2007 02:27
GoldAngel
1.

Код:
command1
ping -n 4 -w 1000 127.0.0.1>nul
command2
ping -n 4 -w 1000 127.0.0.1>nul
...
Автор: Ilyansk
Дата сообщения: 08.11.2007 06:14
Здравствуйте, уважаемое сообщество. провел в поиске намало времени, но ... видно искатель такой
У меня не получается аналог массива переменных на батнике...
Задача: есть файл с посылками данных, разделенных пробелами. Посылка заканчивается ключевым словом, например HALT. количество паттернов в посылке РАЗНОЕ, а мне нужны 3-й и 4-й с КОНЦА. Сейчас я, пока не встречаю HALT забиваю переменные Т1...Tn, инкрементируя n (set /a n+=1) потом

Код:
...
set /a n+=1
T!n!=%1
rem %1 паттерн в посылке, получаемый от внешенго цикла, как параметр
if "%1"=="HALT" (
:: в переменных T1...Tn накопились паттерны
:: теперь неразрешенная мной задача (условно)
:: во внешний файл занести значения паттернов с номерами 2 и 3 если всего их было 6
echo t(n-4) >> ext_file.txt
echo t(n-3) >> ext_file.txt
...
)
Автор: king_stiven
Дата сообщения: 08.11.2007 07:15
Ilyansk
А примерчик конкретный, желательно со всеми вариантами? Что есть , что надо получить.
Автор: Maza Faka
Дата сообщения: 08.11.2007 07:24
Ilyansk
Попробуй так:

Код:
@echo off

type test.txt | findstr /i "halt\>"> new.txt
for /f "tokens=3" %%a in ('find /v /c "" new.txt') do set str_count=%%a

set /a str=%str_count%-3
call :parsing
set /a str=%str_count%-4
call :parsing

del /f /q new.txt
pause
goto :EOF

:parsing
for /f "skip=%str% delims=" %%a in (new.txt) do set pStr=%%a & goto :show

:show
echo %pStr%
Автор: Ilyansk
Дата сообщения: 08.11.2007 09:14
ой, вот это да! вот это оперативность! спасибо за отклик! извините, я тут "погружен" вот и думал, что ваши телепаты не в отпуске... в общем есть файл со след. содержимым

11 22 33 44 555 66 77 HALT 11 22 3333 44 555 HALT 11 22 33 44 5 6666 77 88 HALT

на выходе должны иметь файл
44,555
22,3333
5,6666

так яснее? мысль была такая: до слова HALT запоминаем посылки
(я тут вставлю комменты..., осторожнее, из-за них "сходу" код не запашет)

Код: set "n=0"
for /f "tokens=*" %%A in (inp_fil.txt) do call :proc %%A
goto :eof
:proc
if not "%1"=="" ( // если не пусто
set /a n+=1 // инкремент счетчика паттернов
set T!n!=%1 //запоминание в Тn паттерна n
if "%1"=="HALT" ( //если паттерн HALT посылка кончилась
set /a i1=n-4 //вычисляем индексы нужных Т
set /a i2=n-3
echo %T!i1!%,%T!i2!% >> out_file.txt //пишем на выход, вот тут-то и трабль
//конструкция %Т!i1!%, по-моему, должна выдать содержимое
//T4 при n=8, но выдается пусто
set "n=0" //обнуление счетчика паттернов
)
shift //сдвиг входа
goto :proc
)
Автор: king_stiven
Дата сообщения: 08.11.2007 09:43
Ilyansk
setlocal enabledelayedexpansion
поставь в начале кода
Автор: Ilyansk
Дата сообщения: 08.11.2007 09:46
да стоит оно там, набирал код от руки из головы. тот готовый слегка запутан, и не HALT там...
это и не очень важно, для меня не ясен был синтаксис конструирования имени переменной для вывода
а получилось так:
что бы вывести значение Тn, для разных n
применять конструкцию !T%n%!
но учесть, что подстановка %n% не обновляется по времени выполнения, но уже есть куда копать...
... накопал, достаточно echo !T%n%! >> out_file.txt вызвать через call
все, всем спасибо
Автор: 01MDM
Дата сообщения: 08.11.2007 10:20
Ilyansk

Код:
@echo off
set count=0
:next1
set /a count+=1
for /f "tokens=%count% delims=H" %%i in ('type test.txt') do (
if "%%i"=="ALT" goto:eof
call:parse "%%i"
goto:next1
)
goto:eof
:parse
set count1=0
:next2
set /a count1+=1
for /f "tokens=%count1%" %%i in ('echo %1') do (
goto:next2
)
set /a tok4=count1-5
set /a tok3=count1-4
for /f "tokens=%tok4%,%tok3%" %%i in ('echo %1') do (
echo %%i,%%j
)
Автор: king_stiven
Дата сообщения: 08.11.2007 10:26
Ilyansk

Код: setlocal enabledelayedexpansion
set "n=0"
for /f "tokens=*" %%A in (2.txt) do call :roc %%A
goto :eof
:roc
if not "%1"=="" (
set /a n+=1
set T!n!=%1
set /a i1=!n!-3
set /a i2=!n!-2
if "%1"=="HALT" (
echo !T%i1%!,!T%i2%! >> out_file.txt
set "n=0"
)
shift
goto :roc
)
Автор: pgofman2
Дата сообщения: 08.11.2007 14:18
test.txt содержит строку:

11 22 33 44 555 66 77 HALT 11 22 3333 44 555 HALT 11 22 33 44 5 6666 77 88 HALT
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ФАЙЛ МНОГОСТРОЧНЫЙ?
Автор: aficio
Дата сообщения: 08.11.2007 15:18
Уважаемые коллеги! Нужна помощь!
Нашел на просторах инета 2 скрипта для работы с alert.log в Oracle.

1 скрипт) ждет появления в алерт логе события с кодом ORA- и шлет админу это сообщение об этой ошибке

2скрипт) переименовует файл

Хотелось бы чтобы этот переименованный файл добавлялся в конец файла к примеру all.log (т.е файл который бы содержал все события с начала установки Oracle) !!!!!!!

Вот скрипты:

ora-alerts.cmd:
set workdir=c:\oracle\admin\orcl\bdump
pushd %workdir%
find "ORA-" ORCLALRT.LOG > c:\dbwork\alerts.txt
if errorlevel 1 goto END
blat c:\dbwork\alerts.txt -t Jeff.Eberhard@xxxxxxxxx -s "Oracle WINSPC
Alert"
call c:\dbwork\datetype.bat orclalrt.log
:END
popd

datetype.bat:
@Echo OFF
TITLE DateName
REM DateName.CMD
REM takes a filename as %1 and renames as %1_YYMMDDHHMM
REM
REM -------------------------------------------------------------
IF %1.==. GoTo USAGE
Set CURRDATE=%TEMP%\CURRDATE.TMP
Set CURRTIME=%TEMP%\CURRTIME.TMP

DATE /T > %CURRDATE%
TIME /T > %CURRTIME%

Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j

Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k

Echo RENAME %1 %1_%YYYYMMDD%%HHMM%
RENAME %1 %1_%YYYYMMDD%%HHMM%
GoTo END

:USAGE
Echo Usage: DateName filename
Echo Renames filename to filename_YYYYMMDDHHMM
GoTo END

:END
REM
TITLE Command Prompt
Автор: Tipulatoid
Дата сообщения: 08.11.2007 16:06
aficio

Цитата:
Хотелось бы чтобы этот переименованный файл добавлялся в конец файла к примеру all.log

datetype.bat

Код: @Echo OFF
TITLE DateName
REM DateName.CMD
REM takes a filename as %1 and renames as %1_YYMMDDHHMM
REM
REM -------------------------------------------------------------
IF %1.==. GoTo USAGE
Set CURRDATE=%TEMP%\CURRDATE.TMP
Set CURRTIME=%TEMP%\CURRTIME.TMP

DATE /T > %CURRDATE%
TIME /T > %CURRTIME%

Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j

Set PARSEARG="eol=; tokens=1,2,3* delims=:, "
For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMM=%%i%%j%%k

Echo RENAME %1 %1_%YYYYMMDD%%HHMM%
RENAME %1 %1_%YYYYMMDD%%HHMM%
type %1_%YYYYMMDD%%HHMM%>> all.log
GoTo END

:USAGE
Echo Usage: DateName filename
Echo Renames filename to filename_YYYYMMDDHHMM
GoTo END

:END
REM
TITLE Command Prompt
Автор: aficio
Дата сообщения: 08.11.2007 16:19
Спасибо!!! Tipulatoid !!!!
Автор: king_stiven
Дата сообщения: 08.11.2007 16:23
aficio

copy /b all.log + %1_%YYYYMMDD%%HHMM%
Автор: 01MDM
Дата сообщения: 08.11.2007 16:33
pgofman2

Цитата:
ФАЙЛ МНОГОСТРОЧНЫЙ?

нет
Автор: Ilyansk
Дата сообщения: 09.11.2007 06:22
Уважаемые king_stiven (!? ), 01MDM, pgofman, Maza Faka
спасибо за внимание к нуждам страждущих. А как 01MDM догадался, что файл однострочный? Кстати, а есть ограничение на длину обрабатываемой FOR /F строки?

Задачу можно считать решенной, тем более, при таком количестве вариантов. Не без помощи этой ветки форума "окунулся" в ВАТ мир... Че у меня теперь только не делается с их помощью, и по ночам... еще планировщик помогает дюже, и фар и плагин s&r для него - ващще незаменимая вещь и ... но это уже для других "веток"
Еще раз всем спасибо ^_^
Автор: Lutvun
Дата сообщения: 09.11.2007 20:27
Парни, помогайте: нужно чтоб по батнику файл типа xxxx.log перейменовывалса в файл типа "Текущая дата".log.
Посути вопрос как узнать текущюю дату.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869

Предыдущая тема: Доступ к реестру через RegEdit?


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