Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Сравнение конечного количества файлов с начальным (http://forum.oszone.net/showthread.php?t=321683)

composter 13-12-2016 15:35 2695369

Сравнение конечного количества файлов с начальным
 
Добрый день. я написал батник который обрабатывает файлы , после каждой обработки у файла появляется опроеделенный префикс соответвующий этапу обработки, если в какой то момент произошла ошибка обработки то он уже не поулчит нужный префикс и соответвенно не будет учавствовать в последующей обработки и в конце файлов которые прошли несколько ступеней обработки может быть меньше чем начальное количество. соответвсенно у меня вопрос как получить список тех файлов которые есть в начале но которых нет в конце обработки.
я так понимаю что начале можно записать файлы в лог
Код:

set log=%CD%\logfile.log
for /f "delims=" %%d in ('dir/b/od "%FILEPATH%\%FILEMASK0%"') do (>>%log% echo %%~nd )

а дальше что нужно делать?

Iska 13-12-2016 15:56 2695378

composter, очень сумбурное описание.

composter 13-12-2016 16:23 2695385

постараюсь по понянтнее. нужно получить первональный список файлов. дальше 2 варианта
-после обратботки получить список конечных файлов, сравнить их , если во 2 списке нет каких то файлов из 1, то создать 3 список и их туда добавить.
-после обработки сравить конечные файлы с 1 списком, и те файлы которые есть в папке вычеркнуть из 1 списка.

alpap 14-12-2016 02:00 2695490

composter,
а обязательно списки нужны или чисто операции с файлами?
Код:

@echo off
set "d1=papka1"
set "d2=papka2"
for /f "delims=" %%a in ('dir/a-d/b "%d1%"') do if not exist "%d2%\%%a" echo copy ^(Копируем недостающие^) "%d1%\%%a" в "%d2%\"
echo Удаляем все совпадающие по имени файлы:
for /f "delims=" %%a in ('dir/a-d/b "%d2%"') do echo del "%d1%\%%a"
pause

.

composter 14-12-2016 13:36 2695619

ну можно не списки ,а в переменную записать все названия файлов.
просто первоначальные файлы (они же файлы из 1 списка) во время 1 обработки переименовываются и файлов с таким именем не существует.

порпробовал ваш код
Код:

chcp 1251
set "d1=C:\333\444"
set "d2=C:\333\555"
for /f "delims=" %%a in ('dir/a-d/b "%d1%"') do if not exist "%d2%\%%a" echo copy ^(Копируем недостающие^) "%d1%\%%a" в "%d2%\"
echo Удаляем все совпадающие по имени файлы:
for /f "delims=" %%a in ('dir/a-d/b "%d2%"') do echo del "%d1%\%%a"
pause

вначале в папку 444 переместилл 6 файлов из них 4 в 555, потом наоборот - результат ничего не изменилось после запуска скрипта

alpap 14-12-2016 15:11 2695640

composter,
а скрипт написан не для дет. сада и не является догмой, это инструмент, которым надо уметь работать. Поубирать echo для боевого запуска, убрать комментарий внутри условия.
Зачем браться за написание кодов, просить помощи, а самому не знать и не видеть банальных элементарных вещей. Делайте все руками, bat не для вас.

Iska 14-12-2016 15:19 2695644

alpap, я бы не отказался, если бы Вы перевели мне на русский ТЗ, ибо я так толком и не понял озвученное.

composter 14-12-2016 17:46 2695690

Вложений: 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

если кому интересно то сейчас мой скрипт выгляди вот так

megaloman 14-12-2016 18:12 2695699

composter, На фиг Зачем те списки, если в норме после обработки первый список должен быть пустым?
Я понимаю задачу так (рассматриваю на уровне отдельного файла):
батник
1. берёт в папке файл (хотелось бы знать маску файлов, чтобы при обработке не взять лишнего),
2. запускает обработку, после обработки файл переименовывается, исходный файл не хранится, что само по себе плохо. Кстати, обработанный файл остаётся в той же папке ?(что мне тоже не нравится). При сбое что происходит, переименованный файла не появляется а исходный файл уничтожается? или исходный остаётся на месте? А если сбой произошел, что делать? Принять к сведению и ничего не делать? Или надо разобраться с файлом и всё-таки его обработать?
Я уверен, что ваша задача разрешима без большого напряжения, но чётко распишите, что у вас происходит, то, что вам надо знать, какие файлы не обработаны, понятно, но ваши пассажи насчёт списков сбивают с толку.

composter 14-12-2016 19:49 2695731

ну я думал разбить на разные части. но раз вы хотите могу вывалить все сразу.
обрабабатывается на всех этапах только 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 прошли обработку не до конца (в идеале еще добавить аналз согласно последнему по времени префиксу)

на счет копирования/добавления префикса/складирования в одной папки это просто мое решение. если вы считаете что лучше подругому как то сделать то расскажите

composter 14-12-2016 20:37 2695743

создаются файлы после обработки для того, чтобы в конце можно было понять что на какой то операции была ошибка, и провести эти действия в ручную.


возможно для файла необходимо провести команду recovery , как осуществить это с помощью bat файла и консоли автокада я не знаю, так как команда открывает новый файл а перейти к нему в консоли автокада не получается
либо могут быть proxy объекты и прочее

Iska 14-12-2016 20:38 2695745

Цитата:

Цитата composter
если по каким то причинам произошла ошибка во время иполненися скрипта автокадом , то просто не появится файл "___222___1a.dwg , а значит в дальнейшей обработки он участвовать не будет . »

Цитата:

Цитата composter
в конце файлы переименовываются в исходные имена (просто убирается префикс). »

Вместо переименовываний, которые только запутывают дело, я бы действовал иначе. Создали вложенную Папку1, обработали очередной файл на первом этапе — положили результат в неё. Создали рядом вложенную Папку2, обработали на втором этапе очередной файл из Папки1 — положили результат в неё. И так далее до получения конечного результата. Оригиналы могут быть либо сразу помещены в какую-нибудь папку Backup — если Вам обязательно получать результирующие файлы на месте старых оригиналов.

А в Вашем случае в результате получается мешанина из обработанных, полуобработанных и вовсе не обработанных файлов, и Вы потом судорожно пытаетесь с ними разобраться.

Я не знаю, что умеет и как именно работает скрипт AutoCad'а, обрабатывает ли он сам файл по месту или загружает файл в память, обрабатывает и затем записывает поверх (и может ли записать результат в новый файл), умеет ли он писать в текстовый файл (те самые логи), но я бы действовал так. В моём варианте можно как обрабатывать файлы скопом поэтапно, либо каждый файл зараз проводя его по всем этапам — ничего особо не изменится.

megaloman 14-12-2016 21:09 2695757

composter,
Вот вариант с последовательной обработкой каждого файла, если это допускается логикой задачи
Код:

@Echo Off
cls

chcp 1251 >nul

Set "Pgm=C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe"
rem Set "Pgm=Z:\Test\test.bat"

Set "MaskIn=*.dwg"

Set "Pref1=___111___"
Set "Pref2=___222___"
Set "Pref3=___333___"
Set "Pref4=___444___"

Set "In=%CD%"

Set "OutBox=%CD%\_OutBox"

Set "Out1=puandau1.scr"
Set "Out2=todxf.scr"
Set "Out3=todwg.scr"
Set "Out4=puandau2.scr"

Set "Derr=%In%\_In_err"

md "%OutBox%" 2>nul
md "%Derr%" 2>nul

For /F "usebackq delims=" %%f IN (`Dir "%In%\%MaskIn%" /B /A:-D 2^>nul`) Do (
        Copy "%In%\%%f" "%Derr%\" >nul
        Move /Y "%In%\%%f" "%OutBox%\%Pref1%%%f" >nul
        If Exist "%OutBox%\%Pref1%%%f" Call "%Pgm%" /i "%OutBox%\%Pref1%%%f" /s "%OutBox%\%Out1%" /l en-US
        If Exist "%OutBox%\%Pref2%%%f" Call "%Pgm%" /i "%OutBox%\%Pref2%%%f" /s "%OutBox%\%Out2%" /l en-US
        If Exist "%OutBox%\%Pref3%%%f" Call "%Pgm%" /i "%OutBox%\%Pref3%%%f" /s "%OutBox%\%Out3%" /l en-US
        If Exist "%OutBox%\%Pref4%%%f" Call "%Pgm%" /i "%OutBox%\%Pref4%%%f" /s "%OutBox%\%Out4%" /l en-US
        If Exist "%OutBox%\%%f" Del "%Derr%\%%f"
)

Как это работает:
Берётся исходный файл.
Копируется в папку для файлов, не прошедших обработку (Err).
Перемешается с префиксом 1 в папку с результатом (Out)
Далее последовательно вызывается обработчик, который делает последовательно в Out-папке из ранее обработанного файла файл с префиксом 2,3,4 и, наконец, с исходным именем (если я правильно понял логику работы вашего обработчика).
Если в Out - папке появился файл с исходным именем, то исходный файл в Err-папке удаляется.
Если нет - в Err папке сохраняется исходный файл, который можно обработать повторно, перенеся во входную папку ручками.

И так для всех файлов в исходной папке.
Какая радость от разделения папки с исходными файлами и результатом: можно несколько раз проводить обработку, не опасаясь навредить ранее обработанным файлам. Надеюсь, имена файлов уникальны? Иначе надо делать выходные папки с именами по времени обработки.

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

Наверное, рационально обработку делать в отличной от Out папке, например, Tmp, при этом в Out отправлять успешные файлы, а в Tmp- недообработанные. Но тут не проблема в доработке, мне надо понимать, полезно ли Вам то, что я Вам предлагаю.

Единственное, не очень понял, что делать с файлами в Out-папке с префиксами (то есть при обработке был сбой): удалять?
Доработать батник для работы с несколькими расширениями - это мелочь, труднее понять, что нужно.

composter 15-12-2016 13:07 2695904

-Я не представляю размер Ваших файлов и насколько они Вам дороги, иначе я бы предложил создать архивную папку и складывать туда все исходные файлы после успешной обработки.
-ну размер файла dwg в среднем не более 10мб, размер dxf может достигать 100 мб. ну backup никогд не бвыает лишним )

-Единственное, не очень понял, что делать с файлами в Out-папке с префиксами (то есть при обработке был сбой): удалять?
-если все операции прошли удачно для файла то промежутоные результаты не нужны, если ошибка то нужен лишь последний вариант этого файла (с последним префиксом ну или последний по времени)

-Не томите, вываливайте как .dxf файл во время обработки становится .dwg. Всё из Вас надо под пыткой вытягивать
-при запуске скрипта todxf.scr происходит конветрация из dwg в dxf , при запуске todwg.scr -происходит обратное действие конвертация из dxf в dwg

megaloman 15-12-2016 13:19 2695908

Цитата:

Цитата composter
если все операции прошли удачно для файла то промежутоные результаты не нужны, если ошибка то нужен лишь последний вариант этого файла

Не понимаю! Допустим, обработчик обрабатывает файл с префиксом 1. Что после обработки: только файл с префиксом 2 или файл 1 и 2? До сих пор у меня была иллюзия, что каждый последующий шаг обработки оставляет только последний файл. Если же все префиксные файлы остаются, то я бы предложил после каждого успешного шага убивать файлы с предыдущим префиксом. Как на самом деле обстоят дела? То есть при нормальной обработке никаких файлов с префиксами не должно остаться. Кстати, вас устроило то, что я наваял, или у меня артель "Напрасный труд"?

Iska 15-12-2016 13:39 2695914

composter, используйте тэг «quote» для цитирования.

composter 15-12-2016 14:15 2695926

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

после каждой обработки по идее нужен новый префикс (чтобы в лог внести на какой стадии произошла ошибка), другое дело стоит ли создавать новый файл или просто переименовывать

Цитата:

Кстати, вас устроило то, что я наваял, или у меня артель "Напрасный труд"?
простите, был занят на работе. я очень ценю что мне помогаете .
сейчас протестил, прерывается после второго скрипта. там получается dxf файл после скрипта, а маска файлов только dwg / попробовал заменить на Set "MaskIn=*.dwg *.dxf" вообще не пошло.

на счет последвательного применения к файлу всех скриптов это наверное правильнее. а как добавить еще туда что если ненаходит такого префикса, то запсь в лог префикса и копирование послденего по времени файла и переименовывание его в нужный префикс?

composter 15-12-2016 18:13 2695995

Исходный Файл.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
в ней применяется скрипт к файлу ___333___ , если в предыдущем результате была ошибка , то будет файл ___222___ послдений и файл не найдет , значит нужно записать в лог что последняя версия файла ___222___ и имя файла

megaloman 15-12-2016 22:05 2696036

Обработка файлов ведётся в папке TMP, успешный результат помещается в OUT, промежуточный сбойный результат остаётся в TMP, исходный сбойный файл помещается в ERR. При обработке промежуточные файлы могут иметь расширение, отличное от исходного. При неуспешной обработке создаётся лог-файл с указанием наличия файлов.
Код:

@Echo Off
cls

chcp 1251 >nul

Set "Pgm=C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe"
REM Set "Pgm=Z:\Test\test2.bat"

Set "MaskIn=*.dwg"

Set "Pref1=___111___"
Set "Pref2=___222___"
Set "Pref3=___333___"
Set "Pref4=___444___"

Set "In=%CD%"

Set "OutBox=%In%\_Box_Out"
Set "TmpBox=%In%\_Box_Tmp"
Set "ErrBox=%In%\_Box_Err"

md "%OutBox%" 2>nul
md "%TmpBox%" 2>nul
md "%ErrBox%" 2>nul

Set "Out1=puandau1.scr"
Set "Out2=todxf.scr"
Set "Out3=todwg.scr"
Set "Out4=puandau2.scr"

Set "ErrLog=%Date%-%Time%"
Set "ErrLog=%ErrLog::=_%"
Set "ErrLog=%ErrLog:/=_%"
Set "ErrLog=%ErrBox%\~%ErrLog:,=.%_Err.Log"

FOR %%f IN ("%In%\%MaskIn%") DO (
        Call :DelAll "%%f"

        Copy "%%f" "%ErrBox%\" >nul
        Move /Y "%%f" "%TmpBox%\%Pref1%%%~nxf" >nul

        Call :Job "%TmpBox%\%Pref1%%%~nxf" "%TmpBox%\%Out1%"
        Call :Job "%TmpBox%\%Pref2%%%~nxf" "%TmpBox%\%Out2%" "%TmpBox%\%Pref1%%%~nxf"
        Call :Job "%TmpBox%\%Pref3%%%~nxf" "%TmpBox%\%Out3%" "%TmpBox%\%Pref2%%%~nxf"
        Call :Job "%TmpBox%\%Pref4%%%~nxf" "%TmpBox%\%Out4%" "%TmpBox%\%Pref3%%%~nxf"
       
        If Exist "%TmpBox%\%%~nxf" (
                Del "%TmpBox%\%Pref4%%%~nxf"
                Move /Y "%TmpBox%\%%~nxf" "%OutBox%\" >nul
                Del "%ErrBox%\%%~nxf"
        ) Else (
                Echo ----- Исходный файл "%%f" от %%~tf  %%~zfb не обработан.>>"%ErrLog%"
                Echo                    перемещен "%ErrBox%\%%~nxf"  Промежуточные файлы:>>"%ErrLog%"
                FOR %%i IN ("%TmpBox%\%Pref1%%%~nf.*") DO Echo "%%i" %%~ti %%~zib >>"%ErrLog%"
                FOR %%i IN ("%TmpBox%\%Pref2%%%~nf.*") DO Echo "%%i" %%~ti %%~zib >>"%ErrLog%"
                FOR %%i IN ("%TmpBox%\%Pref3%%%~nf.*") DO Echo "%%i" %%~ti %%~zib >>"%ErrLog%"
                FOR %%i IN ("%TmpBox%\%Pref4%%%~nf.*") DO Echo "%%i" %%~ti %%~zib >>"%ErrLog%"
                Echo -------------------------------------------------------------------->>"%ErrLog%"
        )
)
GoTo :Eof

:DelAll
        Del "%TmpBox%\%~n1.*" 2>nul
        Del "%OutBox%\%~n1.*" 2>nul

        Del "%TmpBox%\%Pref1%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref2%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref3%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref4%%~n1.*" 2>nul
GoTo :Eof

:Job
        If Exist "%~dpn1.*" (
                If Not "%~3"=="" Del "%~dpn3.*"
                FOR %%i IN ("%~dpn1.*") DO (
                        Call "%Pgm%" /i "%%i" /s %2 /l en-US
                )
        )


alpap 16-12-2016 04:01 2696059

если все происходит вокруг одного файла и требуется именно это:
Цитата:

Цитата composter
то будет файл ___222___ послдений и файл не найдет , значит нужно записать в лог что последняя версия файла ___222___ и имя файла »

то при данных именах будет работать это:
Код:

@echo off

set "d=papka"
set "lf=log.txt"
set "snf=__333__Файл"& if not "%~1"=="" (set "snf=%~1") else (set/p "snf=Vvedite imja faila: ")

for /f "delims=" %%a in ('dir/a-d/b "%d%"^|find "__"') do @echo %%a|find "%snf%" && (call :#1 "%%a") || (call :#2 "%%a")
pause>nul& exit

:#1
 >"%lf%" (echo Последняя версия файла: %~1)
exit/b

:#2
 >"%lf%" (
 echo Файл %snf% не найден
 echo Последняя версия файла: %~1
 )
exit/b


composter 21-12-2016 23:36 2697541

попробовал скрипт от megaloman пишет "puandau1.scr": Can't find file.
на счет скрипта от alpap , я не совсем понял куда его подставлять

попробовал впихнуть обработку на ошибки в scr файл, но консоль автокада никак не хочет обрабатывать ошибки. в автокаде все срабатывает ,а вот консоль просто игнорирует обработку ошибок.

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

megaloman 22-12-2016 09:40 2697598

Цитата:

Цитата Русская народная сказка
Жил был царь, у царя был двор, во дворе был кол, на колу - мочало. Не начать ли нам сказку сначала?

То есть, вернёмся к постановке задачи. Осознайте, пожалуйста, что ни у кого нет Ваших реальных файлов для обработки, скорее всего, мало у кого из участников обсуждения имеется AutoCad и сомневаюсь, что подавляющее число жителей вселенной знают, как работает утилита accoreconsole.exe. Поэтому я могу только моделировать её работу (для этого у меня есть батник, преобразующий имена файлов в соответствии с описанным Вами алгоритмом и который Вам совершенно неинтересен и который в приводимом для Вас решении я всегда отключаю).
До сих пор обсуждались файлы .dwg. Как оказалось, во время обработки они получают префиксы и на каком-то шаге имеют другое расширение. Откуда берутся файлы puandau1.scr, todxf.scr", todwg.scr, puandau2.scr" и где они должны располагаться, Вы до сих пор не говорили. Я предположил, что они - результат работы утилиты. Опишите, как проходит обработка, какие файлы при этом участвуют, получаются, и где они должны располагаться. Иначе, читаем русскую народную сказку.

Iska 22-12-2016 10:02 2697601

Ну, то, что:
Цитата:

Цитата composter
поэтому лог файл не нужен и промежуточные не нужны. те которые не прошли их исходники в папку error , те которое прошли в папку out »

наконец-то осознано — уже колоссальный прогресс. Лучше поздно, чем никогда.

composter 22-12-2016 22:30 2697772

изначально у меня есть батник в папке и исполняемые файлы для автокадовской консоли : 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 в исходной папке.

megaloman 23-12-2016 11:42 2697876

Цитата:

если есть у файла префикс ___555___ то переименовать его (убрать 9 символов) и переместить в папку out , если нет то переименовать его (убрать 9 символов) и переместить в папку error.
Если файл есть - переименуем. А если его нет, что переименовавать?

composter 23-12-2016 12:54 2697892

файл переносится в папку temp и проходит постепенную обработку ...
это значит что даже если он не прошел ни одной обработки то его первоначальная версия останется
еще лучше если бы что при переносе он получал префикс ___111___, чтобы при конечном переименывавании не обрезал часть файла если он не прошел ни одной обработки

alpap 23-12-2016 13:36 2697904

Цитата:

Цитата composter
(например был префикс ___111___ , »

Цитата:

Цитата composter
если есть у файла префикс ___555___ то переименовать его »

Цитата:

Цитата composter
если нет то переименовать его »

Цитата:

Цитата composter
что при переносе он получал префикс ___111___, »

для данной ситуации был ___111___ и стал ___111___ и непонятно прошел он первую обработку или все.

интересно, каким образом утилита обрабатывает файл. Будет ошибка, если файл не обработан? При каких-то условиях утилита не станет обрабатывать файл или в любом случае обработает, но не так как надо и как это будет ясно при этом? Есть какой-то четкий критерий того что файл идеален (прошел все утилиты с победой)? Что меняется в файле (время, размер, расширение), если он не проходит как надо хоть одну из утилит.

После осознания и приведения в порядок этих вопросов можно выстроить алгоритм действий, а уже после этого можно играться с именами и перемещениями.

composter 23-12-2016 16:21 2697928

До первой обработки файл переносится в папку и при перименовании получает перфикс ___111___
После первой обработки, появляется новый файл тольок его префикс будет ___222___ , файл с перфиксом ___111___ остается. если же обработка прошла не удачно то файл с префиксом ___222___ не появится, и не получит все последующие префиксы, файл с префиксом ___111___ остается на месте.

если будет ошибка при обработке,то консоли автокада пофиг, ошибка просто пропустится и файл с новым префиксом не создасться

если файл прошел все обработки то у него будет префикс ___555___ , если какую ту обработку не прошел то его префикс будет меньше (___444___ или ___333___)

alpap 23-12-2016 16:27 2697931

в таком случае чем не устраивает мой код из п20?

и да. Чего надо добиться не на выходе (найти последний прошедший как понимаю), а в идеале - чтобы все прошли в конце концов или отбор конкретных это и есть конец задачи.

composter 23-12-2016 16:46 2697935

так в 20 соббщени вроде запись в лог файл ...

в конце найти файл самый новый по дате создания и проверить есть ли в его имени префикс ___555___(этот префикc получает файл после финальной обработки) , если есть у файла префикс ___555___ то переименовать его (убрать 9 символов) и переместить в папку out , если нет то переименовать его (убрать 9 символов) и переместить в папку error. все файлы в папке temp удаляются.

alpap 23-12-2016 19:59 2697967

Код:

@echo off
set "d=papka"& set "rf=dwg"
set "d_out=out"& set "err=error"
if not exist "%d_out%" md "%d_out%"
if not exist "%err%" md "%err%"
dir/a-d/b/o-d/tc "%d%"|set/p name=^& cmd/v/c echo !name!^|^>nul find "___555___" ^&^& cmd/v/c move "%d%\!name!" "%d_out%\new.%rf%" ^|^| cmd/v/c move "%d%\!name!" "%err%\new.%rf%"
pause

set "d=papka"
"papka" - основная папка со всеми файлами.

megaloman 24-12-2016 20:45 2698127

composter,
Вот решение под Вашу новую постановку
Код:

@Echo Off
cls

chcp 1251 >nul

Set "Pgm=C:\Program Files\Autodesk\AutoCAD 2014\accoreconsole.exe"
rem Set "Pgm=Z:\Test\test3.bat"

Set "In=%CD%"
Set "MaskIn="%In%\*.dwg" "%In%\*.dxf""

Set "Pref1=___111___"
Set "Pref2=___222___"
Set "Pref3=___333___"
Set "Pref4=___444___"
Set "Pref5=___555___"

Set "OutBox=%In%\_Box_Out"
Set "TmpBox=%In%\_Box_Tmp"
Set "ErrBox=%In%\_Box_Err"

md "%OutBox%" 2>nul
md "%TmpBox%" 2>nul
md "%ErrBox%" 2>nul

Set "Scr1=puandau1.scr"
Set "Scr2=todxf.scr"
Set "Scr3=todwg.scr"
Set "Scr4=puandau2.scr"

FOR %%s IN ("%Scr1%" "%Scr2%" "%Scr3%" "%Scr4%") DO Copy "%In%\%%s" "%TmpBox%\" >nul

Set "ErrLog=%Date%-%Time%"
Set "ErrLog=%ErrLog::=_%"
Set "ErrLog=%ErrLog:/=_%"
Set "ErrLog=%ErrBox%\~%ErrLog:,=.%_Err.Log"

FOR %%f IN (%MaskIn%) DO (
        Call :DelAll "%%f"

        Copy "%%f" "%ErrBox%\" >nul
        Move /Y "%%f" "%TmpBox%\%Pref1%%%~nxf" >nul

        Call :Job "%TmpBox%\%Pref1%%%~nxf" "%TmpBox%\%Scr1%" "%TmpBox%\%Pref2%%%~nxf" "%%f"
        Call :Job "%TmpBox%\%Pref2%%%~nxf" "%TmpBox%\%Scr2%" "%TmpBox%\%Pref3%%%~nxf" "%%f"
        Call :Job "%TmpBox%\%Pref3%%%~nxf" "%TmpBox%\%Scr3%" "%TmpBox%\%Pref4%%%~nxf" "%%f"
        Call :Job "%TmpBox%\%Pref4%%%~nxf" "%TmpBox%\%Scr4%" "%TmpBox%\%Pref5%%%~nxf" "%%f"

        If Exist "%TmpBox%\%Pref5%%%~nf.*" (
                FOR %%s IN ("%TmpBox%\%Pref5%%%~nf.*") Do Move /Y "%%s" "%OutBox%\%%~nxf"
                Del "%ErrBox%\%%~nxf" 2>nul
        )
)

FOR %%s IN ("%Scr1%" "%Scr2%" "%Scr3%" "%Scr4%") DO Del "%TmpBox%\%%s" 2>nul
GoTo :Eof

:DelAll
        Del "%TmpBox%\%~n1.*" 2>nul
        Del "%OutBox%\%~nx1" 2>nul

        Del "%TmpBox%\%Pref1%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref2%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref3%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref4%%~n1.*" 2>nul
        Del "%TmpBox%\%Pref5%%~n1.*" 2>nul
GoTo :Eof

:Job
        If Exist "%~dpn1.*" (
                FOR %%i IN ("%~dpn1.*") DO (
                        Call "%Pgm%" /i "%%i" /s %2 /l en-US
                )
                If Exist "%~dpn3.*" (
                        Del "%~dpn1.*"
                ) Else (
                        Move /Y "%~dpn1.*" "%ErrBox%\" >nul
                        Echo ----- Исходный файл %4 от %~t1  %~z1b не обработан.>>"%ErrLog%"
                        Echo                    перемещен "%ErrBox%\%~nx4" >>"%ErrLog%"
                        Echo                              "%ErrBox%\%~nx1" >>"%ErrLog%"
                        Echo -------------------------------------------------------------------->>"%ErrLog%"
                )
        )


1. Исходные файлы, .scr файлы помещаются в папку с батником
2. При нормальной обработке обработанные файлы с именами исходных помещаются в папку OutBox
3. При неуспешной обработке исходный файл и последний из имеющихся промежуточных файлов помещаются в папку ErrBox.
Сообщение о неуспешной обработке записывается в лог-файл с именем даты-времени обработки.

composter 09-01-2017 13:10 2702038

Вложений: 1
если ошибок среди файлов нет, то все проходит на ура!!!!
если же есть ошибка то в папке остается файл и файл с перфиксом и лог файл. можно сделать так чтобы файл с префиксом тоже удалялся.
и еще можно в конце (после всех операции с файлами) добавить удаление файлов *.dwg и *.dxf из исходной папки (где они изначально находились) (без подпапок), а то в процессе ошибки в некоторых случаях сохраняется кривой файл в папке запуска батника, который нафиг не нужен
лог на всякий случай прикладываю

megaloman 09-01-2017 15:20 2702079

composter, не прошло и полгода ...


Время: 10:41.

Время: 10:41.
© OSzone.net 2001-