Ru-Board.club
← Вернуться в раздел «Программы»

» Командная строка, батники, сценарии (bat, cmd) 2

Автор: JI063uk
Дата сообщения: 15.04.2008 04:03
Elroir
Работает! Спасибо. А что именно дают цифры 1251
Автор: Rush
Дата сообщения: 15.04.2008 04:08
JI063uk

Цитата:
А что именно дают цифры 1251

Это кодовая страница кириллицы.
Автор: JI063uk
Дата сообщения: 15.04.2008 04:21
Поняино а как сделать чтобы мой батник не закрывался сразу после того как сделает свою задачю, а дал мне посмотреть результат своей работы???
Автор: D555
Дата сообщения: 15.04.2008 05:56
Подскажите плиз батничек для XP.., такой:

1.разьединить инет соединение
2.пауза 30 сек.
3.соединить инет соединение(из сет.подключений)
ps 1. и 3. нашёл..., со 2. пунктом проблемы

И извиняюсь за ламерский вопрос, а чем .cmd от .bat отличаются?

Заранее спасибо ответившим !
Автор: Le9i0nX
Дата сообщения: 15.04.2008 07:57
JI063uk

Цитата:
Поняино а как сделать чтобы мой батник не закрывался сразу после того как сделает свою задачю, а дал мне посмотреть результат своей работы???


В конце добавь строчку без ковычек "PAUSE"

Добавлено:
D555

Цитата:

И извиняюсь за ламерский вопрос, а чем .cmd от .bat отличаются?

Отличается типом а посуте всё это текстовики просто .bat для Win95,98,me а .cmd для WinNT4,nt5(2000),XP хотя .bat запускается в обоих ветках ОС.
Автор: tolyn77
Дата сообщения: 15.04.2008 09:49
D555
ping -n 30 127.0.0.1
Автор: XXXXL
Дата сообщения: 15.04.2008 12:57
D555


Код: @echo off
rasdial "имя соединения" /disconnect
sleep.exe 3
rasdial "имя соединения" "логин" "пароль"
Автор: LeshiyAlex
Дата сообщения: 15.04.2008 14:02
Здравствуйте гуру командной строки!

Вот есть у меня мысль, но чото как то реализации не поддается, может кто подскажет?

Есть несколько файлов - попадают в папку ZAPROS с определенным именем и постоянно разным расширением. Нахожу файл в этой папке загоняю в переменную %F_F%

SET FILES=NO
CD %FPATH%\ZAPROS
@for %%f in (*.*) do SET FILES=YES
@IF "%FILES%"=="NO" GOTO end
for %%A in (*.*) do SET F_F=%%A
@ECHO Найден файл %F_F%

Дальше - в этом файле из набора текста (разное кол-во строк) есть кодовое слово KOMBANK
за ним в следующих строках может быть как одна так и несколько отделенные пробелами с начала строки имя файла, с другой строки тоже имя файла, в основном с расширением .ARJ но опять же невсегда. И далее снова пустые строки из пробелов.

Как описать батником - нахождение строки KOMBANK и затем взять после этой строки все строки содержащие имена файлов и построить из них список в файле KOMBANK.TXT

Помогите, а то уже всю голову себе сломал
Автор: Elroir
Дата сообщения: 15.04.2008 16:37
LeshiyAlex

Цитата:
Дальше - в этом файле из набора текста (разное кол-во строк) есть кодовое слово KOMBANK
за ним в следующих строках может быть как одна так и несколько отделенные пробелами с начала строки имя файла, с другой строки тоже имя файла, в основном с расширением .ARJ но опять же невсегда. И далее снова пустые строки из пробелов.

Приведи пример этого файла
Автор: Nicka_Grey
Дата сообщения: 15.04.2008 18:00
Нужна помощь по сему вопросу, плз
Сам что то никак не соображу...
Автор: LeshiyAlex
Дата сообщения: 15.04.2008 19:59
Elroir

Цитата:
Приведи пример этого файла

Первый [more]ИЭС №-такойто дата DD/MM/YYYY TT:MM:CC AM




Центральный Банк
Российской Федерации
(Банк России)

Главное управление по
Тюменской области

Региональный центр
информатизации


РПС - XXX @ DOMAIN.RU

DD.MM.YYYYг. №XX-XX-X/XXXXX




РПС
Без досылки бумажного экземпляра















<Рассылка нового ПО>










Рассылается новая версия программного обеспечения "Сведения
о денежных переводах физических лиц из Российской Федерации и
переводах в Российскую Федерацию в пользу физических лиц", код
формы P0409407.

Библиотека KOMBANK:
Файл f407_35.arj











и.о. Директора РЦИ X.X. Фио дира









Исп. Ктототам
Тел. XX-XX-XX

[/more]
одного варианта наверное мало, чтоб понять, приведу ещё один:
Второй [more]ИЭС №-XXXXX DD/MM/YY TT:MM:CC AM


Центральный Банк
Российской Федерации
(Банк России)

Главное управление по
Тюменской области
Региональный центр
информатизации

РПС - XXX @ DOMAIN.RU

DD.MM.YYYYг. №XX-XX-X/XXXXX





РПС
Без досылки бумажного экземпляра


<Рассылается новое ПО>.



Получите новые версии программного обеспечения комплекса
задач "Финансовая отчетность".
Программы предназначены для подготовки формы
"Данные о средневзвешенных процентных ставках по кредитам,
предоставленным кредитной организацией" код 0409128
и формы "Данные о средневзвешенных процентных ставках по привлеченным
кредитной организацией депозитам, вкладам и кредитам" код 0409129.
Отчеты по состоянию на 1 мая 2005 года должны быть
подготовлены рассылаемыми программными комплексами.

Библиотека KOMBANK:
Файл f128_06.arj
f129_05.arj














и.о. Директора РЦИ X.X. Фио дира









Исп. Ктототам
Тел. XX-XX-XX

[/more]
Автор: zurk798
Дата сообщения: 15.04.2008 20:05
ПОМОГОТЕ, ПОЖАЛУЙСТА. Подскажите программу для составления гербов. СРОЧНО НУЖНО.
Автор: Elroir
Дата сообщения: 15.04.2008 20:32
Nicka_Grey

Цитата:
Нужно получить список строк с самыми свежими файлами ([имя файла] )
Прикидваю что нужно for-ом бежать по обоим файлам, но вот пока только не знаю как сравнивать дату время....

И никто не знает.
Я, конечно, утрирую, но сравнивать в командной строке (читай в батниках) дату и время очень сложно.

Добавлено:
LeshiyAlex
Можно ли предположить, что после списка файлов и строчек с пробелами, всегда идет строка "и.о. Директора РЦИ X.X. Фио дира"? (На самом деле, меня интересует, можно ли взять слово "Директор", как признак окончания блока с файлами)
Автор: LeshiyAlex
Дата сообщения: 15.04.2008 21:27
Elroir

Цитата:
Можно ли предположить, что после списка файлов и строчек с пробелами, всегда идет строка "и.о. Директора РЦИ X.X. Фио дира"? (На самом деле, меня интересует, можно ли взять слово "Директор", как признак окончания блока с файлами)

да так и есть, пишется либо и.о. Директора, либо просто Директор
Автор: Nicka_Grey
Дата сообщения: 15.04.2008 22:35
Elroir
ну ок
а какие возможные варианты?
И проще написать свою тулзень?
Автор: 01MDM
Дата сообщения: 15.04.2008 23:11
Nicka_Grey

Цитата:

[имя файла] [время] [дата]

Это все как есть? В квадратных скобках?
Автор: Nicka_Grey
Дата сообщения: 15.04.2008 23:34
01MDM
не
полностью такое
test.xml 17:17:26 11/03/2008
test.xml 14:22:56 11/03/2008
или
test2.xml 21:03:30 12/03/2008
test2.xml 14:22:56 13/03/2008
Автор: 01MDM
Дата сообщения: 15.04.2008 23:39
Nicka_Grey

Так будет сложнее, если в именах файлов есть пробелы.
Автор: Nicka_Grey
Дата сообщения: 16.04.2008 00:11
01MDM
Пока вроде файлов пробелами в имени нет
Но при надобности могу сделать разделитель между 3-мя этими значениями и другой
Автор: Elroir
Дата сообщения: 16.04.2008 02:21
LeshiyAlex
Тогда так:

Код:
...
::Твой код для нахождения файла.
::После него в переменной F_F должно быть название файла
...
chcp 1251>nul
copy /y KOMBANK.TXT KOMBANK.BAK >nul 2>&1
del /q KOMBANK.TXT 2>nul
for /f "tokens=1 delims=[] " %%b in ('type "%F_F%" ^| find /n "KOMBANK:"') do call :get_files "%F_F%" "%%b"
goto :EOF
:get_files
for /f "usebackq skip=%~2 tokens=1,2*" %%c in (%1) do (
(echo %%c %%d | find "Директор">nul) && goto :EOF
if /i "%%c"=="Файл" (if not "%%d"=="" echo %%d>>KOMBANK.TXT) else (echo %%c>>KOMBANK.TXT)
)
Автор: 01MDM
Дата сообщения: 16.04.2008 02:26
Nicka_Grey

Если правильно понял: надо сравнить два списка и выбрать из них более свежие файлы с одинаковыми названиями

Код:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1-3" %%i in (1.txt) do (
    
    set name1=%%i
    call:prep %%j %%k
    set time1=!time:~-6,6!
    set date1=!date!

    for /f "tokens=1-3" %%i in (2.txt) do (
        
        set name2=%%i
        call:prep %%j %%k
        set time2=!time:~-6,6!
        set date2=!date!

if !name2!==!name1! (
    
    set name-!date1!!time1!-1=!name1!-1.txt
    set name-!date2!!time2!-2=!name2!-2.txt
    
    for /f "tokens=2 delims==" %%i in ('set name ^| sort /r') do (
                set res=%%i
            )
            echo !res!
)
    set name-!date1!!time1!-1=
    set name-!date2!!time2!-2=
    )
    set name1=
    set name2=
)
goto:eof

:prep
for /f "tokens=1-3 delims=:" %%i in ("%1") do set time=0%%i%%j%%k
for /f "tokens=1-3 delims=/" %%i in ("%2") do set date=%%k%%j%%i

Автор: Elroir
Дата сообщения: 16.04.2008 02:32
Nicka_Grey

Цитата:
ну ок
а какие возможные варианты?
И проще написать свою тулзень?

Первая мысь, которая мне пришла в голову - это, именно, написать утилитку на каком-либо из языков программирования высокого уровня. В них есть готовые библиотеки для работы с датой и временем, и в том числе, для сравнения.

P.S. Судя по всему - 01MDM решил это сделать в батнике. "Безумству храбрых поем мы песни"

01MDM
Красивое решение! Про sort я и забыл...
Автор: LeshiyAlex
Дата сообщения: 16.04.2008 06:05
Elroir

Цитата:
LeshiyAlex
Тогда так:

в результате выполнения в файле KOMBANK.TXT собрались первые слова.

Цитата:
Файл
Директор
Исп.
Тел.
Автор: Elroir
Дата сообщения: 16.04.2008 06:21
LeshiyAlex
Не сработало сравнение со словами на русском языке (Файл, Директор).
У меня оба тестовых файла были обработаны правильно.
Попробуй убрать из кода строчку "chcp 1251>nul ".
Автор: LeshiyAlex
Дата сообщения: 16.04.2008 06:48
Elroir
Точно дело было в кодировке, а можно расшифровать, что где делает в этой процедуре?

Цитата:
:get_files
for /f "usebackq skip=%~2 tokens=1,2*" %%c in (%1) do (
(echo %%c %%d | find "Директор">nul) && goto :EOF
if /i "%%c"=="Файл" (if not "%%d"=="" echo %%d>>KOMBANK.TXT) else (echo %%c>>KOMBANK.TXT)
)

особенно интересует - skip=%~2 ?
Добавлено:
А вот ещё такой вариант файла [more]ИЭС №-XXXXX DD/MM/YYYY TT:MM:CC AM


Центральный Банк
Российской Федерации
(Банк России)

Главное управление по
Тюменской области

Региональный центр информатизации


РПС - XXX @ DOMAIN.RU

DD.MM.YYYYг.







"Рассылка новой версии ПО".




Направляем Вам новую версию (2.195) комплекса задач "Отчетность
коммерческих банков" для подготовки ежемесячных отчетов в составе архивного
файла Obvkb195.ARJ.

Файл OBVKB195.ARJ содержит файлы:
OBVED_NK.EXE - выполняемый модуль уровня КО;
PUNKTSPR - справочник для печати формы 0409102;
READ2195.DOC - описание изменений.

Комплекс задач находится на FTP сервере Главного управления Банка России по
Тюменской области в библиотеке KOMBANK:
архивный файл Obvkb195.ARJ




Директор РЦИ X.X Фио дира




Исп. такойто
Тел. XX-XX-XX
[/more]
как сделать чтоб и он тоже обрабатывался, если попадает со всеми.
если как сейчас то в KOMBANK.TXT попадает слово "архивный"

Добавлено:
и ещё одна проблема всплыла, когда фалов несколько перечислено, то указывается слово "Файлы", оно соответственно не сравниваясь залетает в KOMBANK.TXT
Вот пример файла [more]



РПС
Без досылки бумажного экземпляра














<Рассылка справочников>.



Рассылается актуальное состояние файла CURRLIST.DBF -
базы данных "Общероссийского классификатора валют и
Классификатора клиринговых валют".
Рассылается актуальное состояние базы данных <Справочник
стран мира для формы № 402> (gosli402.arj), для использования
в задаче "Сведения о расчетах между резидентами и
нерезидентами за выполнение работ, предоставление услуг,
результатов интеллектуальной деятельности и операции
неторгового характера".
Направляем Вам файл goslist, содержащий актуальную базу
данных "Общероссийского классификатора стран мира".
Рассылается Общероссийский классификатор валют - okv.arj

Библиотека KOMBANK:
Файлы Curlist.arj
Gosli402.arj
Goslist.arj
Okv.arj



Директор РЦИ X.X. Такойто

Исп. такойто
Тел. XX-XX-XX
[/more]
Автор: Nicka_Grey
Дата сообщения: 16.04.2008 13:12
01MDM
Спасибо
мыслю понял приблизительно
Хотя вот это
Цитата:
for /f "tokens=2 delims==" %%i in ('set name ^| sort /r')

как то не до конца...
Автор: 01MDM
Дата сообщения: 16.04.2008 13:28
Nicka_Grey

Цитата:
как то не до конца...


Сначала создается псевдомассив из переменных:


Код:
set name-!date1!!time1!-1=!name1!-1.txt
set name-!date2!!time2!-2=!name2!-2.txt
Автор: Nicka_Grey
Дата сообщения: 16.04.2008 13:42
01MDM
Теперь все прояснилось
Большое спасибо за помощь!
Автор: Elroir
Дата сообщения: 17.04.2008 01:25
LeshiyAlex

Цитата:
особенно интересует - skip=%~2 ?

В строчке:
for /f "tokens=1 delims=[] " %%b in ('type "%F_F%" ^| find /n "KOMBANK:"') do call :get_files "%F_F%" "%%b"
я нахожу номер строки, содержащей слово "KOMBANK" и передаю этот номер в блок обработки файла (второй аргумент командной строки в виртуальном батнике get_files). Директива skip=n, используется чтобы пропустить первые н строк разбираемого файла.
Соответственно, skip=%~2 - пропускает именно то кол-во строк, которое надо.

Вот обновленный код:

Код:
:get_files
for /f "usebackq skip=%~2 tokens=1,2,3" %%c in (%1) do (
echo c=%%c * d=%%d * e=%%e
(echo %%c %%d | find "Директор">nul) && goto :EOF
if /i "%%c"=="Файл" (echo %%d>>KOMBANK.TXT) else (
if /i "%%c"=="Файлы" (echo %%d>>KOMBANK.TXT) else (
if /i "%%c"=="архивный" (echo %%e>>KOMBANK.TXT) else (
if /i "%%c"=="архивные" (echo %%e>>KOMBANK.TXT) else (
echo %%c>>KOMBANK.TXT
))))
)
Автор: LeshiyAlex
Дата сообщения: 17.04.2008 11:50
Elroir

Огромное спасибо, всё прекрасно работает!!!

а можно ещё маленький вопросик, как сделать быструю проверку тот или не тот файл, т.е. есть ли упоминание KOMBANK в файле или нет?
в например таком формате

Цитата:
ЕСЛИ есть строка KOMBANK то делай ВСЮ ПРОЦЕДУРУ, а ЕСЛИ НЕТ то удали файл

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: DVD-video (ДВД-видео) - что и как (часть 3)


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