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

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

Автор: bomzzz
Дата сообщения: 14.10.2010 17:38
решали. назад полистай страниц может 10. но точно не очень давно
Автор: Accessor
Дата сообщения: 14.10.2010 17:58
bomzzz
вроде прошерстил "версию для печати" на предмет поиска слова "внешний", но что-то безрезультатно. Сейчас ещё попробую.
Автор: 01MDM
Дата сообщения: 14.10.2010 18:20
Accessor

Цитата:
Народ, а кто решал задачу получения своего внешнего IP из командного файла? Есть какие-нибудь наработки?


Код:
@echo off
setlocal

2>nul 1>&2 cmd /c wget -O "%TEMP%\ip.txt" "http://whatismyip.com/automation/n09230945.asp"

0<"%TEMP%\ip.txt" set /p "ip="

del "%TEMP%\ip.txt"
echo %ip%
Автор: BagaBaga
Дата сообщения: 14.10.2010 20:58
А как можно сделать такое:
есть 4 файла, в каждом по одной строке. Для определенности, в файлах f1, f2, f3, f4 хрнятся строки (ровно одна строка в каждом файле) s1,s2,s3,s4
выдать на консоль [s1][s2][s3][s4], т.е. "склеить" эти строки в одну, обрамленные квадратными скобками?
Автор: 01MDM
Дата сообщения: 14.10.2010 22:17
BagaBaga

Код:
@echo off

0>nul 2>&0 (

for /f "tokens=*" %%i in ('type *.txt') do set /p="[%%i]"

)
Автор: M1chA
Дата сообщения: 15.10.2010 13:50
Подскажите пожалуйста, как реализовать завершение 1С на терминальном сервере под всеми пользователями?
Нужно, чтобы в 22:45 все 1С-и которые не закрыты закрылись бы.
Сервер крутится под 2003 std
Автор: res2001
Дата сообщения: 15.10.2010 14:10
M1chA
taskkill /? + шедулер тебе помогут
Автор: NvvLazyTiger
Дата сообщения: 15.10.2010 14:14
Привет. Есть у M$ дивная утилита командной строки - telnet.exe (у меня w2k3 server).

Вопрос - как (если вообще) передать ей сценарий сеанса связи, перехватить её StdOut & StdErr? И получить коды ошибок (ErrorLevel)?

Или может быть есть альтернатива?
Автор: res2001
Дата сообщения: 15.10.2010 14:29
NvvLazyTiger

Цитата:
Есть у M$ дивная утилита командной строки - telnet.exe

Она не дивная, она кривая. Передать сценарий ей нельзя, ерорлевел она не устанавливает. Ищи альтернативу от других производителей, если тебе эти функции нужны.
Автор: M1chA
Дата сообщения: 15.10.2010 14:34
2res2001

Стормозил )
Когда это уже сделал ты ответил )))
Автор: Accessor
Дата сообщения: 15.10.2010 16:06
Народ, есть ли средства вычитать список юзверей из каталога LDAP почтового сервера?
Автор: bomzzz
Дата сообщения: 15.10.2010 16:18
Accessor
есть
Автор: serg3001
Дата сообщения: 16.10.2010 16:18
Уважаемые, спецы помогите создать bat файлик, очень нужна помощь:

В папке имеется txt файл с именем U01.txt в виде:

058:42306810913001194171:500.50:Иванов:Иван:Иванович:
0113:42307810313002471421:2000.00:Петров:Петр:Петрович:
0164:42301810913005852993:3000.00:Сидоров:Сидор:Сидорович:

для него необходимо создать 1234.zag файл, который имеет вид:

Тест:13000534:22.01.2010:07:40201810600000100002:3:5500.50:001:12.10.2010

где красным цветов помечены переменные величины, которые извлекаются из txt файла, а именно -

3 - кол-во строк в файле txt;
5500.50 - общая сумма из 3-го столбца;
001 - номер, который будет возрастать для следующих txt файлов;
12.10.2010 - дата создания txt файла.

Текст который будет помещаться в zag файл должен быть в DOS кодировке.






Автор: res2001
Дата сообщения: 16.10.2010 19:04
serg3001

Цитата:
12.10.2010 - дата создания txt файла.

Дата создания какого файла 1234.zag или U01.txt?
Обрабатываемый файл всегда имеет это имя?
Что делать с файлом после обработки?


Добавлено:
Как-то так будет:

Код: @echo off
if exist num.ini (set /p num=<num.ini & set /a "num+=1") else (set "num=1")
echo.%num%>num.ini
set /a "sum1=0"
set /a "sum2=0"
set /a "count=0"
for /f "tokens=3,4 delims=:." %%i in (u01.txt) do (
set /a "count+=1"
set /a "sum1+=%%i"
set /a "sum2+=%%j"
)
set /a "sum1+=sum2/100"
set /a "sum2=sum2%%100"
set "sum2=000%sum2%"
set "num=000%num%"
>1234.zag echo.13000534:22.01.2010:07:40201810600000100002:%count%:%sum1%.%sum2:~-2%:%num:~-3%:%date%
Автор: serg3001
Дата сообщения: 16.10.2010 21:29
res2001


Цитата:
Дата создания какого файла 1234.zag или U01.txt?

Дата создания U01.txt


Цитата:
Обрабатываемый файл всегда имеет это имя?

будет 6 txt файлов с разными именами (U01 - U06) Можно ли сделать счётчик для следующих созданных txt файлов? (в строке помечен красным цветом) - Название:13000534:22.01.2010:07:40201810600000100002:3:5500.50:001:12.10.2010


Цитата:
Что делать с файлом после обработки?

Если вы про zag файл, то его надо просто создать в той же папке, где и U01.txt,а если про txt, то сохранить в том же виде.
Забыл написать ещё, что исходный TXT файл и сформированный ZAG файл нужно заархивировать в zip архив.
А вот незадача, если их помещать в архив, то и файл U01.txt надо в DOS кодировку переводить.

Протестил ваш код для примера, создался файл num.ini ,а должен создаваться файл 1234.zag

Сорри, в конец кода дописал >1234.zag и файл появился.
Подскажите, а зачем формируется num.ini ?


Автор: smirnvlad
Дата сообщения: 17.10.2010 07:59
serg3001

Цитата:
Подскажите, а зачем формируется num.ini ?

чтобы сохранять

Цитата:
001 - номер, который будет возрастать для следующих txt файлов;
Автор: serg3001
Дата сообщения: 17.10.2010 09:22
smirnvlad, res2001, спасибо, сам не сообразил.

Интересно, а как реализовать перекодировку в DOS для текста в TXT, ZAG файлах и их архивацию в ZIP?
Есть архиваторы 7z, Winrar, может посредством этих программ надо дописать в коде что-то?
И можно ли работать со структурой DBF файлов через BAT?
Автор: res2001
Дата сообщения: 17.10.2010 10:26
serg3001

Цитата:
Интересно, а как реализовать перекодировку в DOS для текста в TXT, ZAG файлах

zag файл смысла нет перекодировать - там у тебя только цифры, они в обеих кодировках одинаковы. А вообще поищи какой-либо консольный перекодировщик, их есть в гугле.
7z умеет архивировать в zip из консоли, можешь им и воспользоваться.

Цитата:
И можно ли работать со структурой DBF файлов через BAT?

С dbfами можно работать из командной строки, но с помощью доп.утилит. Например есть чудная вещица - cdbf для консоли, правда не бесплатная, но если это не смущает, то вперед.

Добавлено:

Цитата:
Можно ли сделать счётчик для следующих созданных txt файлов?

Я ж сделал счетчик. Или тебе нужен отдельный счетчик для каждого txt файла?
т.е. чтоб отдельно считались обработанные u01.txt, отдельно u02.txt ит т.д.
Это можно сделать по аналогии с первым счетчиком, добавив дополнительные переменные num1, num2 и т.д. и дополнительные файлы num1.ini, num2.ini ... для хранения счетчиков.
Можно, конечно, и в одном файле все счетчики хранить.

Цитата:
создался файл num.ini

Хранить счетчики где-то надо. Можно и реестр заюзать для этих целей, но зачем такие сложности.

Добавлено:
[more=Вот]
Код: @echo off
set "outfile=1234.zag"
1>nul 2>%outfile% cd
for /l %%a in (1;1;6) do if exist u0%%a.txt call:processfile u0%%a.txt
exit

:processfile
if exist num.ini (set /p num=<num.ini) else (set "num=0")
set /a "num+=1"
>num.ini echo.%num%
set /a "sum1=0"
set /a "sum2=0"
set /a "count=0"
for /f "tokens=3,4 delims=:." %%i in (%1) do (
    set /a "count+=1"
    set /a "sum1+=%%i"
    set /a "sum2+=%%j"
)
set /a "sum1+=sum2/100"
set /a "sum2=sum2%%100"
set "sum2=000%sum2%"
set "nums=000%num%"
set "fd=%~t1"
set "fd=%fd:~,10%"
>>%outfile% echo.13000534:22.01.2010:07:40201810600000100002:%count%:%sum1%.%sum2:~-2%:%nums:~-3%:%fd%
exit /b
Автор: serg3001
Дата сообщения: 17.10.2010 11:47
res2001

Архивацию получилось сделать с помощью 7z, кодировку тоже нашёл как в консоли менять.


Цитата:
Я ж сделал счетчик. Или тебе нужен отдельный счетчик для каждого txt файла?

Спасибо, со счётчиком всё хорошо, в реестре ничего не надо хранить. Всё и так хорошо.


Цитата:
zag файл смысла нет перекодировать - там у тебя только цифры, они в обеих кодировках одинаковы.

В файле ZAG название присутствует, его то и надо будет кодировать. Но это не беда, уже нашёл кое-что.

Можете ещё сделать для каждого txt файла расстановку следующих номеров (пример в строке 07 пометил):

U01 - 01
U02 - 07
U03 - 07
U04 - 01
U05 - 02
U06 - 06

и для каждого из файлов txt должен создаваться zag файл, например, для U01.txt U01.zag

Название:13000534:22.01.2010:07:40201810600000100002:3:5500.50:001:12.10.2010
Программку CDBF GUI нашёл, решил сделать перенос данных в txt, думаю лучше переносить данные из DBF в TXT файл.

Последнее, что ещё требуется сделать, есть три файла txt - a.txt, b.txt, c.txt

Структура каждого из них такова:
a.txt
Б01288|АВБ|500.00
Б00055|АВБ|1000.00
Б00290|АВВ|1000.00

b.txt
052|Б01288|Иванов Иван Иванович|42301810813005338766
031|Б00055|Петров Петр Петрович|42307810313001101365
056|Б00290|Сидоров Сидор Сидорович|42306810913005834330

c.txt
052|0163
031|054
056|0164

нужно из этих трёх файлов составить два txt файла (с именами файлов АВБ и АВВ соответственно) в виде:

АВБ.txt
0163:42301810813005338766:500.00:Иванов Иван Иванович:
054:42307810313001101365:1000.00:Петров Петр Петрович:

АВВ.txt
0164:42306810913005834330:1000.00:Сидоров Сидор Сидорович:

P.S. Очень нужна ваша помощь, так как в вопросах программирования я не силён.

Автор: res2001
Дата сообщения: 17.10.2010 14:17
serg3001
По первой части: [more=тут]
Код: @echo off
if exist u01.txt call:processfile u01.txt 01
if exist u02.txt call:processfile u02.txt 07
if exist u03.txt call:processfile u03.txt 07
if exist u04.txt call:processfile u04.txt 01
if exist u05.txt call:processfile u05.txt 02
if exist u06.txt call:processfile u06.txt 06
exit

:processfile
set "outfile=%~n1.zag"
1>nul 2>%outfile% cd
if exist num.ini (set /p num=<num.ini) else (set "num=0")
set /a "num+=1"
echo.%num%>num.ini
set /a "sum1=0"
set /a "sum2=0"
set /a "count=0"
for /f "tokens=3,4 delims=:." %%i in (%1) do (
set /a "count+=1"
set /a "sum1+=%%i"
set /a "sum2+=%%j"
)
set /a "sum1+=sum2/100"
set /a "sum2=sum2%%100"
set "sum2=000%sum2%"
set "nums=000%num%"
set "fd=%~t1"
set "fd=%fd:~,10%"
>>%outfile% echo.13000534:22.01.2010:%2:40201810600000100002:%count%:%sum1%.%sum2:~-2%:%nums:~-3%:%fd%
exit /b
Автор: serg3001
Дата сообщения: 17.10.2010 14:50
res2001
здороово получилось.

Цитата:
И, кстати, батники по умолчанию используют DOS кодировку, так что zag файлы можно не конвертить - они и так будут в правильной кодировке.

Упс, я же zag в FARе просматривал, так там они не в dos показывались. Открыл просмотр в TotalCommander и увидел DOS кодировку.

Цитата:
Можно, конечно, но думаю, что если файлы будут достаточно большого объема, то тормоза обеспечены. Я бы тебе посоветовал работать напрямую с DBF.

Что касаемо dbf, файлики с большим объёмом данных будут, мне надо будет попробовать CDBF или изучить работу FoxPro. По vbs и ODBC ничего не знаю.
Спасибо, думаю, всё будет в порядке.

Автор: wolf0425
Дата сообщения: 17.10.2010 15:01

Цитата:
Упс, я же zag в FARе просматривал, так там они не в dos показывались.

а в какой??? 866 - это и есть ДОС кодирока, как кодировку в ФАРе переключать надеюсь знаешь.
Автор: res2001
Дата сообщения: 17.10.2010 15:11
serg3001

Цитата:
мне надо будет попробовать CDBF или изучить работу FoxPro.

Не работу Foxpro, а установить ODBC драйвер Visual FoxPro для DBF, а работать с этим драйвером так же через vbs/js используя объекты ADO, так же как и со стандартным драйвером Microsoft dBase driver, который поставляется вместе с виндой. Просто драйвер FoxPro более продвинутый, в частности умеет делать связывание таблиц и много чего другого.

Цитата:
нужно из этих трёх файлов составить два txt файла (с именами файлов АВБ и АВВ соответственно) в виде:

Что-то я не понял по какому принципу записи должны попадать в АВБ и АВВ файлы?

Добавлено:
Понял принцип разделения:
Код: @echo off
SetLocal EnableDelayedExpansion
set "tmpfile=abc.txt"
del /f/q %tmpfile%
for /f "tokens=1,* delims=|" %%a in (a.txt) do (
for /f "tokens=1,2,* delims=|" %%c in ('findstr "%%a" b.txt ') do set "bstr=%%c|%%e" & set "cf=%%c"
for /f "tokens=1,2 delims=|" %%c in ('findstr "!cf!" c.txt ') do set "cstr=%%d"
>>%tmpfile% echo.%%a^|%%b^|!bstr!^|!cstr!
)
for /f "tokens=1-7 delims=|" %%a in (%tmpfile%) do >>%%b.txt echo.%%g:%%f:%%c:%%e:
del /f/q %tmpfile%
Автор: serg3001
Дата сообщения: 17.10.2010 16:24
wolf0425
в FARe открываю zag файл (просмотр по F3), внизу показывает OEM, текст - Название
в Totale просмотр по F3 показывает - рчтрэшх

res2001

Цитата:
Что-то я не понял по какому принципу записи должны попадать в АВБ и АВВ файлы?

в a.txt берём номер Б01288 (если ему соответствует АВБ, то записать данные в АВБ.txt, если АВВ, то в АВВ.txt) ищем в b.txt такой же номер, если нашли, то берём номер 052 ищем в c.txt такой же, если нашли, то вывести (в файл АВБ.txt)
0163:42301810813005338766:500.00:Иванов Иван Иванович:

Не обессудьте за неграмотное изложение алгоритма.
Запустил batник, но результата не увидел.



Автор: wolf0425
Дата сообщения: 17.10.2010 17:33

Цитата:
в Totale просмотр по F3 показывает - рчтрэшх
теперь ещё рассказать где в Тотале переключается кодировка просмотрщика или сам найдешь?

Автор: serg3001
Дата сообщения: 17.10.2010 17:38
wolf0425
Совсем меня за дурака держите?
здесь проблема не в том как переключиться на другую кодировку в менеджерах, а в том, что мне надо понять, изначально в zag файл записывается DOS кодировка или нет.
Судя по всему ответ на мой вопрос - нет.
Автор: res2001
Дата сообщения: 17.10.2010 17:49
serg3001

Цитата:
Запустил batник, но результата не увидел.

Какие-то ошибки?
У меня на твоих примерах все отрабатывает.
Закоментируй последнюю строчку и посмотри, после выполнения, что получается в abc.txt.
Батник делает следующее: в первом цикле создается общий файл abc.txt, в котором содержатся данные из всех трех файлов; во втором цикле создаются файлы АБВ и АВВ из общего файла.

Добавлено:

Цитата:
изначально в zag файл записывается DOS кодировка или нет.

Если не указано иное, то батник работает в ДОС кодировке.
Переключать в батнике кодировку можно командой chcp. Например chcp 1251 - включает WIN кодировку.
Автор: serg3001
Дата сообщения: 17.10.2010 18:04
На windows 7 работаю, может из-за этого ошибки.Сейчас попробую на ХР, лог выложу.
Вопрос по кодировке решён.Спасибо.
Проверил на XP - результата нет.
Вот скрины:
1-лог
2-содержание файлов
3-После удаления последней строки
Автор: lorents
Дата сообщения: 17.10.2010 18:14
Добрый вечер!
Помогите, пожалуйста, решить следующую проблему:
у меня есть текстовой файл png.log

Цитата:
Name Offset Length CRC
Required chunk: IHDR 00000010 0000000d 10446792
Required chunk: IDAT 00000029 000179b3 30ef3a68
Required chunk: IEND 000179e8 00000000 ae426082

In: C:\Image I\Dir0\(1001).png /c2 /f5
In: 96748 bytes

...

Out:
Block boundaries: 273f,7be8,28974,39184,432e3,6264c,688e1,868aa,86f19,875d2,87c6f,88287,89004,89d1a,8a35f,8b0df,8b767,8bd79,8c42e,9614c (21 blocks)

...

Out: 96749 bytes
Took 51.011 sec.
Unable to compress further

подскажите, как можно получить переменную которая в скобках, а точнее меня интересует число 21. В скобках может быть написано или blocks или block.
Автор: 01MDM
Дата сообщения: 17.10.2010 18:47
lorents

Код:
@echo off
setlocal

for /f "tokens=2 delims=()" %%i in ('findstr "Block boundaries:" png.log') do call:set %%i
echo %blocks%
goto:eof

:set
set "blocks=%1"

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Windows 7 Starter


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