![]() |
Сравнение конечного количества файлов с начальным
Добрый день. я написал батник который обрабатывает файлы , после каждой обработки у файла появляется опроеделенный префикс соответвующий этапу обработки, если в какой то момент произошла ошибка обработки то он уже не поулчит нужный префикс и соответвенно не будет учавствовать в последующей обработки и в конце файлов которые прошли несколько ступеней обработки может быть меньше чем начальное количество. соответвсенно у меня вопрос как получить список тех файлов которые есть в начале но которых нет в конце обработки.
я так понимаю что начале можно записать файлы в лог Код:
set log=%CD%\logfile.log |
composter, очень сумбурное описание.
|
постараюсь по понянтнее. нужно получить первональный список файлов. дальше 2 варианта
-после обратботки получить список конечных файлов, сравнить их , если во 2 списке нет каких то файлов из 1, то создать 3 список и их туда добавить. -после обработки сравить конечные файлы с 1 списком, и те файлы которые есть в папке вычеркнуть из 1 списка. |
composter,
а обязательно списки нужны или чисто операции с файлами? Код:
@echo off |
ну можно не списки ,а в переменную записать все названия файлов.
просто первоначальные файлы (они же файлы из 1 списка) во время 1 обработки переименовываются и файлов с таким именем не существует. порпробовал ваш код Код:
chcp 1251 |
composter,
а скрипт написан не для дет. сада и не является догмой, это инструмент, которым надо уметь работать. Поубирать echo для боевого запуска, убрать комментарий внутри условия. Зачем браться за написание кодов, просить помощи, а самому не знать и не видеть банальных элементарных вещей. Делайте все руками, bat не для вас. |
alpap, я бы не отказался, если бы Вы перевели мне на русский ТЗ, ибо я так толком и не понял озвученное.
|
Вложений: 1
попробуюю еще раз.
в начале я имею файлы 1a.dwg 2a.dwg 3a.dwg 4a.dwg 5a.dwg после первой опереации они переименовываются ___111___1a.dwg ___111___2a.dwg ___111___3a.dwg ___111___4a.dwg ___111___5a.dwg после каждой поледущей операции у меня появляются файлы ___222___1a.dwg ___222___2a.dwg ___222___3a.dwg ___222___4a.dwg ___222___5a.dwg в конце всех операций я перименовываю ихк начальному варианту , но дело в том что в результате ошибок у меня потются файлы и в конце может получиться 1a.dwg 4a.dwg 5a.dwg соответвевенно мне нужно полчить список в котором будут отсутвующие файлы а в частности 2a.dwg 3a.dwg если кому интересно то сейчас мой скрипт выгляди вот так |
composter,
Я понимаю задачу так (рассматриваю на уровне отдельного файла): батник 1. берёт в папке файл (хотелось бы знать маску файлов, чтобы при обработке не взять лишнего), 2. запускает обработку, после обработки файл переименовывается, исходный файл не хранится, что само по себе плохо. Кстати, обработанный файл остаётся в той же папке ?(что мне тоже не нравится). При сбое что происходит, переименованный файла не появляется а исходный файл уничтожается? или исходный остаётся на месте? А если сбой произошел, что делать? Принять к сведению и ничего не делать? Или надо разобраться с файлом и всё-таки его обработать? Я уверен, что ваша задача разрешима без большого напряжения, но чётко распишите, что у вас происходит, то, что вам надо знать, какие файлы не обработаны, понятно, но ваши пассажи насчёт списков сбивают с толку. |
ну я думал разбить на разные части. но раз вы хотите могу вывалить все сразу.
обрабабатывается на всех этапах только 2 типа файлов *.dwg и *.dxf , на выходе остается только 1 тип файла *.dwg содается список№1 (как я писал выше напиремер 1a.dwg , 2a.dwg, 3a.dwg , 4a.dwg ,5a.dwg) у меня в каждом скрипте происходит обработка файла и замена префикса , например если было "___111___1a.dwg" то после обработки добавится файл "___222___1a.dwg" если по каким то причинам произошла ошибка во время иполненися скрипта автокадом , то просто не появится файл "___222___1a.dwg , а значит в дальнейшей обработки он участвовать не будет . в конце файлы переименовываются в исходные имена (просто убирается префикс). еесли возникла при обработке ошибка , это значит что на выходе я получу 3(например) обработанных файла вместо 5(например). создается список№2 (1a.dwg , 4a.dwg ,5a.dwg) создается список№3 , недостающих файлов (2a.dwg, 3a.dwg ) значит мне нужно получить последнюю версию 2 файлов которые не доконца прошли обработку. допустим не прошли 2a.dwg и 3a.dwg, найти среди файлов *2a.dwg последний по дате файл и переименовать его в 2a.dwg , потом тоже самое сделать для 3a.dwg . ну и в конце создать лог файл что файлы 2a.dwg и 3a.dwg прошли обработку не до конца (в идеале еще добавить аналз согласно последнему по времени префиксу) на счет копирования/добавления префикса/складирования в одной папки это просто мое решение. если вы считаете что лучше подругому как то сделать то расскажите |
создаются файлы после обработки для того, чтобы в конце можно было понять что на какой то операции была ошибка, и провести эти действия в ручную.
возможно для файла необходимо провести команду recovery , как осуществить это с помощью bat файла и консоли автокада я не знаю, так как команда открывает новый файл а перейти к нему в консоли автокада не получается либо могут быть proxy объекты и прочее |
Цитата:
Цитата:
А в Вашем случае в результате получается мешанина из обработанных, полуобработанных и вовсе не обработанных файлов, и Вы потом судорожно пытаетесь с ними разобраться. Я не знаю, что умеет и как именно работает скрипт AutoCad'а, обрабатывает ли он сам файл по месту или загружает файл в память, обрабатывает и затем записывает поверх (и может ли записать результат в новый файл), умеет ли он писать в текстовый файл (те самые логи), но я бы действовал так. В моём варианте можно как обрабатывать файлы скопом поэтапно, либо каждый файл зараз проводя его по всем этапам — ничего особо не изменится. |
composter,
Вот вариант с последовательной обработкой каждого файла, если это допускается логикой задачи
Код:
@Echo Off Берётся исходный файл. Копируется в папку для файлов, не прошедших обработку (Err). Перемешается с префиксом 1 в папку с результатом (Out) Далее последовательно вызывается обработчик, который делает последовательно в Out-папке из ранее обработанного файла файл с префиксом 2,3,4 и, наконец, с исходным именем (если я правильно понял логику работы вашего обработчика). Если в Out - папке появился файл с исходным именем, то исходный файл в Err-папке удаляется. Если нет - в Err папке сохраняется исходный файл, который можно обработать повторно, перенеся во входную папку ручками. И так для всех файлов в исходной папке. Какая радость от разделения папки с исходными файлами и результатом: можно несколько раз проводить обработку, не опасаясь навредить ранее обработанным файлам. Надеюсь, имена файлов уникальны? Иначе надо делать выходные папки с именами по времени обработки. Я не представляю размер Ваших файлов и насколько они Вам дороги, иначе я бы предложил создать архивную папку и складывать туда все исходные файлы после успешной обработки. Наверное, рационально обработку делать в отличной от Out папке, например, Tmp, при этом в Out отправлять успешные файлы, а в Tmp- недообработанные. Но тут не проблема в доработке, мне надо понимать, полезно ли Вам то, что я Вам предлагаю. Единственное, не очень понял, что делать с файлами в Out-папке с префиксами (то есть при обработке был сбой): удалять? Доработать батник для работы с несколькими расширениями - это мелочь, труднее понять, что нужно. |
-Я не представляю размер Ваших файлов и насколько они Вам дороги, иначе я бы предложил создать архивную папку и складывать туда все исходные файлы после успешной обработки.
-ну размер файла dwg в среднем не более 10мб, размер dxf может достигать 100 мб. ну backup никогд не бвыает лишним ) -Единственное, не очень понял, что делать с файлами в Out-папке с префиксами (то есть при обработке был сбой): удалять? -если все операции прошли удачно для файла то промежутоные результаты не нужны, если ошибка то нужен лишь последний вариант этого файла (с последним префиксом ну или последний по времени) -Не томите, вываливайте как .dxf файл во время обработки становится .dwg. Всё из Вас надо под пыткой вытягивать -при запуске скрипта todxf.scr происходит конветрация из dwg в dxf , при запуске todwg.scr -происходит обратное действие конвертация из dxf в dwg |
Цитата:
|
composter, используйте тэг «quote» для цитирования.
|
на счет временных файлов, они должны удалятся. просто я изначально и спросил про списки, чтобы согласно им удалять полностью или частично согласно полученным спискам.
после каждой обработки по идее нужен новый префикс (чтобы в лог внести на какой стадии произошла ошибка), другое дело стоит ли создавать новый файл или просто переименовывать Цитата:
сейчас протестил, прерывается после второго скрипта. там получается dxf файл после скрипта, а маска файлов только dwg / попробовал заменить на Set "MaskIn=*.dwg *.dxf" вообще не пошло. на счет последвательного применения к файлу всех скриптов это наверное правильнее. а как добавить еще туда что если ненаходит такого префикса, то запсь в лог префикса и копирование послденего по времени файла и переименовывание его в нужный префикс? |
Исходный Файл.dwg
1. Первый шаг получаем ___111___Файл.dwg 2. Первый запуск accoreconsole.exe получаем ___222___Файл.dwg 3. Второй запуск accoreconsole.exe получаем ___333___Файл.dxf 4. Третий запуск accoreconsole.exe получаем ___444___Файл.dwg 5. Четвер запуск accoreconsole.exe получаем Файл.dwg по поводу записи в лог ну вот запсукается строка Код:
If Exist "%TmpBox%\%Pref3%%%f" Call "%Pgm%" /i "%TmpBox%\%Pref3%%%f" /s "%Out3%" /l en-US |
Обработка файлов ведётся в папке TMP, успешный результат помещается в OUT, промежуточный сбойный результат остаётся в TMP, исходный сбойный файл помещается в ERR. При обработке промежуточные файлы могут иметь расширение, отличное от исходного. При неуспешной обработке создаётся лог-файл с указанием наличия файлов.
Код:
@Echo Off |
если все происходит вокруг одного файла и требуется именно это:
Цитата:
Код:
@echo off |
попробовал скрипт от megaloman пишет "puandau1.scr": Can't find file.
на счет скрипта от alpap , я не совсем понял куда его подставлять попробовал впихнуть обработку на ошибки в scr файл, но консоль автокада никак не хочет обрабатывать ошибки. в автокаде все срабатывает ,а вот консоль просто игнорирует обработку ошибок. я понял что обрабатывать тип ошибки не нужно, если она возникла то лечится одним путем. поэтому лог файл не нужен и промежуточные не нужны. те которые не прошли их исходники в папку error , те которое прошли в папку out |
Цитата:
До сих пор обсуждались файлы .dwg. Как оказалось, во время обработки они получают префиксы и на каком-то шаге имеют другое расширение. Откуда берутся файлы puandau1.scr, todxf.scr", todwg.scr, puandau2.scr" и где они должны располагаться, Вы до сих пор не говорили. Я предположил, что они - результат работы утилиты. Опишите, как проходит обработка, какие файлы при этом участвуют, получаются, и где они должны располагаться. Иначе, читаем русскую народную сказку. |
Ну, то, что:
Цитата:
|
изначально у меня есть батник в папке и исполняемые файлы для автокадовской консоли : puandau1.scr, todxf.scr, todwg.scr, puandau2.scr(располагаются там же где и батник)
я скидываю в эту же папку dwg и dxf файлы, которые будут обрабатываться. так как после некоторых обработок файлов появляется файл с новым расширением dwg и dxf (в зависимости от скрипта),то я в скрипте не могу удалить открытый файл, и чтобы было легче понять прошел файл обработку или нет то после каждой обработки появляется файл с новым префиксом по возрастанию (например был префикс ___111___ , добавился новый файл с префиксом ___222___) файл переносится в папку temp и проходит постепенную обработку всеми скриптами(*.scr). в конце найти файл самый новый по дате создания и проверить есть ли в его имени префикс ___555___(этот префикc получает файл после финальной обработки) , если есть у файла префикс ___555___ то переименовать его (убрать 9 символов) и переместить в папку out , если нет то переименовать его (убрать 9 символов) и переместить в папку error. все файлы в папке temp удаляются. и так с каждым файлом dwg и dxf в исходной папке. |
Цитата:
|
файл переносится в папку temp и проходит постепенную обработку ...
это значит что даже если он не прошел ни одной обработки то его первоначальная версия останется еще лучше если бы что при переносе он получал префикс ___111___, чтобы при конечном переименывавании не обрезал часть файла если он не прошел ни одной обработки |
Цитата:
Цитата:
Цитата:
Цитата:
интересно, каким образом утилита обрабатывает файл. Будет ошибка, если файл не обработан? При каких-то условиях утилита не станет обрабатывать файл или в любом случае обработает, но не так как надо и как это будет ясно при этом? Есть какой-то четкий критерий того что файл идеален (прошел все утилиты с победой)? Что меняется в файле (время, размер, расширение), если он не проходит как надо хоть одну из утилит. После осознания и приведения в порядок этих вопросов можно выстроить алгоритм действий, а уже после этого можно играться с именами и перемещениями. |
До первой обработки файл переносится в папку и при перименовании получает перфикс ___111___
После первой обработки, появляется новый файл тольок его префикс будет ___222___ , файл с перфиксом ___111___ остается. если же обработка прошла не удачно то файл с префиксом ___222___ не появится, и не получит все последующие префиксы, файл с префиксом ___111___ остается на месте. если будет ошибка при обработке,то консоли автокада пофиг, ошибка просто пропустится и файл с новым префиксом не создасться если файл прошел все обработки то у него будет префикс ___555___ , если какую ту обработку не прошел то его префикс будет меньше (___444___ или ___333___) |
в таком случае чем не устраивает мой код из п20?
и да. Чего надо добиться не на выходе (найти последний прошедший как понимаю), а в идеале - чтобы все прошли в конце концов или отбор конкретных это и есть конец задачи. |
так в 20 соббщени вроде запись в лог файл ...
в конце найти файл самый новый по дате создания и проверить есть ли в его имени префикс ___555___(этот префикc получает файл после финальной обработки) , если есть у файла префикс ___555___ то переименовать его (убрать 9 символов) и переместить в папку out , если нет то переименовать его (убрать 9 символов) и переместить в папку error. все файлы в папке temp удаляются. |
Код:
@echo off "papka" - основная папка со всеми файлами. |
composter,
Вот решение под Вашу новую постановку
Код:
@Echo Off 1. Исходные файлы, .scr файлы помещаются в папку с батником 2. При нормальной обработке обработанные файлы с именами исходных помещаются в папку OutBox 3. При неуспешной обработке исходный файл и последний из имеющихся промежуточных файлов помещаются в папку ErrBox. Сообщение о неуспешной обработке записывается в лог-файл с именем даты-времени обработки. |
Вложений: 1
если ошибок среди файлов нет, то все проходит на ура!!!!
если же есть ошибка то в папке остается файл и файл с перфиксом и лог файл. можно сделать так чтобы файл с префиксом тоже удалялся. и еще можно в конце (после всех операции с файлами) добавить удаление файлов *.dwg и *.dxf из исходной папки (где они изначально находились) (без подпапок), а то в процессе ошибки в некоторых случаях сохраняется кривой файл в папке запуска батника, который нафиг не нужен лог на всякий случай прикладываю |
composter, не прошло и полгода ...
|
Время: 10:41. |
Время: 10:41.
© OSzone.net 2001-