Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9

Модерирует : KLASS, IFkO

vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 9
(часть 1, часть 2, часть 3, часть 4, часть 5, часть 6, часть 7, часть 8)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<—>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 17:45 04-09-2010 | Исправлено: Accessor, 18:04 28-09-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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 ?
     
     

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 22:29 16-10-2010 | Исправлено: serg3001, 22:54 16-10-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    serg3001

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

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

    Цитата:
    001 - номер, который будет возрастать для следующих txt файлов;  

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 08:59 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad, res2001, спасибо, сам не сообразил.
     
    Интересно, а как реализовать перекодировку в DOS для текста в TXT, ZAG файлах и их архивацию в ZIP?
    Есть архиваторы 7z, Winrar, может посредством этих программ надо дописать в коде что-то?
    И можно ли работать со структурой DBF файлов через BAT?

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 10:22 17-10-2010 | Исправлено: serg3001, 10:57 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    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

    Хранить счетчики где-то надо. Можно и реестр заюзать для этих целей, но зачем такие сложности.
     
    Добавлено:
    Вот вариант с обработкой шести файлов, счетчик один, общий для всех обрабатываемых файлов, в 1234.zag теперь пишется дата создания файлов u*.txt, а не текущая, как было в прошлом варианте.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 11:26 17-10-2010 | Исправлено: res2001, 12:13 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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. Очень нужна ваша помощь, так как в вопросах программирования я не силён.
     
     

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 12:47 17-10-2010 | Исправлено: serg3001, 15:02 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    serg3001
    По первой части: тут.
     
    Добавлено:
    И, кстати, батники по умолчанию используют DOS кодировку, так что zag файлы можно не конвертить - они и так будут в правильной кодировке.
     
    Добавлено:
    По второй части: смотрю ты уже успешно сконвертировал DBF в txt :-) и теперь хочешь на батниках делать реляционные операции. Можно, конечно, но думаю, что если файлы будут достаточно большого объема, то тормоза обеспечены. Я бы тебе посоветовал работать напрямую с DBF. На сколько помню CDBF для командной строки может выполнять SQL запросы, хотя сам не пользовался этой возможностью.
    Так же с DBFами можно успешно работать из VBS/JS используя объекты ADO и встроенные драйвера ODBC. Правда драйвер по умолчанию очень ограниченный и не позволяет связывать несколько таблиц, но если заюзать драйвер FoxPro, то пожалуйста.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 15:17 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    здороово получилось.

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

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

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

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

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 15:50 17-10-2010 | Исправлено: serg3001, 15:50 17-10-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

    а в какой??? 866 - это и есть ДОС кодирока, как кодировку в ФАРе переключать надеюсь знаешь.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 16:01 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    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%
     

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 16:11 17-10-2010 | Исправлено: res2001, 17:13 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    в FARe открываю zag файл (просмотр по F3), внизу показывает OEM, текст - Название
    в Totale просмотр по F3 показывает - рчтрэшх
     
    res2001

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

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

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 17:24 17-10-2010 | Исправлено: serg3001, 18:04 17-10-2010
    wolf0425



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 18:33 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Совсем меня за дурака держите?
    здесь проблема не в том как переключиться на другую кодировку в менеджерах, а в том, что мне надо понять, изначально в zag файл записывается DOS кодировка или нет.
    Судя по всему ответ на мой вопрос - нет.

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 18:38 17-10-2010 | Исправлено: serg3001, 18:46 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    serg3001

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

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

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

    Если не указано иное, то батник работает в ДОС кодировке.
    Переключать в батнике кодировку можно командой chcp. Например chcp 1251 - включает WIN кодировку.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 18:49 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    На windows 7 работаю, может из-за этого ошибки.Сейчас попробую на ХР, лог выложу.
    Вопрос по кодировке решён.Спасибо.
    Проверил на XP - результата нет.
    Вот скрины:
    1-лог
    2-содержание файлов
    3-После удаления последней строки

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 19:04 17-10-2010 | Исправлено: serg3001, 19:31 17-10-2010
    lorents



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый вечер!
    Помогите, пожалуйста, решить следующую проблему:
    у меня есть текстовой файл 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.

    ----------
    Image Catalyst - оптимизация изображений без потери качества

    Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 19:14 17-10-2010
    01MDM



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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"
     


    Всего записей: 2638 | Зарегистр. 13-02-2006 | Отправлено: 19:47 17-10-2010
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть .js скрипт запускающий блокнот в скрытом виде

    Код:
    var WSHShell = WScript.CreateObject("WScript.Shell");
    WSHShell.Run("notepad",0);
     

    Можно ли запустить таким образом батник(с пробелами в имени)и передать ему параметры? То есть запускаем  
    1.js %1
    и %1 передаётся батнику, и сам батник скрыто запускается?

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 19:47 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    serg3001
    Странные имена файлов у тебя получились.
    Исходные файлы a.txt,b.txt,c.txt у тебя в какой кодировке? Может быть в UTF?

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:17 17-10-2010
    serg3001



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    res2001
    пробелы в конце строк удалил.
    голову ломаю, никак не пойму почему такое происходит, текст в кодировке Кириллическая Windows (1251)

    Всего записей: 3823 | Зарегистр. 16-10-2010 | Отправлено: 20:33 17-10-2010 | Исправлено: serg3001, 20:41 17-10-2010
    res2001



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    serg3001
    Переведи исходные файлы в ДОС кодировки и прогони батник.

    Всего записей: 2580 | Зарегистр. 11-04-2003 | Отправлено: 20:40 17-10-2010
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 9
    vu1tur (09-01-2011 11:53): лимит страниц, продолжение — http://forum.ru-board.com/topic.cgi?forum=62&topic=22143


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru