![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Сравнение конечного количества файлов с начальным |
|
CMD/BAT - Сравнение конечного количества файлов с начальным
|
Новый участник Сообщения: 20 |
Добрый день. я написал батник который обрабатывает файлы , после каждой обработки у файла появляется опроеделенный префикс соответвующий этапу обработки, если в какой то момент произошла ошибка обработки то он уже не поулчит нужный префикс и соответвенно не будет учавствовать в последующей обработки и в конце файлов которые прошли несколько ступеней обработки может быть меньше чем начальное количество. соответвсенно у меня вопрос как получить список тех файлов которые есть в начале но которых нет в конце обработки.
я так понимаю что начале можно записать файлы в лог а дальше что нужно делать? |
|
Отправлено: 15:35, 13-12-2016 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать создаются файлы после обработки для того, чтобы в конце можно было понять что на какой то операции была ошибка, и провести эти действия в ручную.
возможно для файла необходимо провести команду recovery , как осуществить это с помощью bat файла и консоли автокада я не знаю, так как команда открывает новый файл а перейти к нему в консоли автокада не получается либо могут быть proxy объекты и прочее |
Отправлено: 20:37, 14-12-2016 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата composter:
Цитата composter:
А в Вашем случае в результате получается мешанина из обработанных, полуобработанных и вовсе не обработанных файлов, и Вы потом судорожно пытаетесь с ними разобраться. Я не знаю, что умеет и как именно работает скрипт AutoCad'а, обрабатывает ли он сам файл по месту или загружает файл в память, обрабатывает и затем записывает поверх (и может ли записать результат в новый файл), умеет ли он писать в текстовый файл (те самые логи), но я бы действовал так. В моём варианте можно как обрабатывать файлы скопом поэтапно, либо каждый файл зараз проводя его по всем этапам — ничего особо не изменится. |
||
Отправлено: 20:38, 14-12-2016 | #12 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать 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-папке с префиксами (то есть при обработке был сбой): удалять? Доработать батник для работы с несколькими расширениями - это мелочь, труднее понять, что нужно. |
------- Последний раз редактировалось megaloman, 14-12-2016 в 21:22. Отправлено: 21:09, 14-12-2016 | #13 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать -Я не представляю размер Ваших файлов и насколько они Вам дороги, иначе я бы предложил создать архивную папку и складывать туда все исходные файлы после успешной обработки.
-ну размер файла dwg в среднем не более 10мб, размер dxf может достигать 100 мб. ну backup никогд не бвыает лишним ) -Единственное, не очень понял, что делать с файлами в Out-папке с префиксами (то есть при обработке был сбой): удалять? -если все операции прошли удачно для файла то промежутоные результаты не нужны, если ошибка то нужен лишь последний вариант этого файла (с последним префиксом ну или последний по времени) -Не томите, вываливайте как .dxf файл во время обработки становится .dwg. Всё из Вас надо под пыткой вытягивать -при запуске скрипта todxf.scr происходит конветрация из dwg в dxf , при запуске todwg.scr -происходит обратное действие конвертация из dxf в dwg |
Отправлено: 13:07, 15-12-2016 | #14 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Цитата composter:
|
|
------- Отправлено: 13:19, 15-12-2016 | #15 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать composter, используйте тэг «quote» для цитирования.
|
Отправлено: 13:39, 15-12-2016 | #16 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать на счет временных файлов, они должны удалятся. просто я изначально и спросил про списки, чтобы согласно им удалять полностью или частично согласно полученным спискам.
после каждой обработки по идее нужен новый префикс (чтобы в лог внести на какой стадии произошла ошибка), другое дело стоит ли создавать новый файл или просто переименовывать Цитата:
сейчас протестил, прерывается после второго скрипта. там получается dxf файл после скрипта, а маска файлов только dwg / попробовал заменить на Set "MaskIn=*.dwg *.dxf" вообще не пошло. на счет последвательного применения к файлу всех скриптов это наверное правильнее. а как добавить еще туда что если ненаходит такого префикса, то запсь в лог префикса и копирование послденего по времени файла и переименовывание его в нужный префикс? |
|
Отправлено: 14:15, 15-12-2016 | #17 |
Новый участник Сообщения: 20
|
Профиль | Отправить PM | Цитировать Исходный Файл.dwg
1. Первый шаг получаем ___111___Файл.dwg 2. Первый запуск accoreconsole.exe получаем ___222___Файл.dwg 3. Второй запуск accoreconsole.exe получаем ___333___Файл.dxf 4. Третий запуск accoreconsole.exe получаем ___444___Файл.dwg 5. Четвер запуск accoreconsole.exe получаем Файл.dwg по поводу записи в лог ну вот запсукается строка в ней применяется скрипт к файлу ___333___ , если в предыдущем результате была ошибка , то будет файл ___222___ послдений и файл не найдет , значит нужно записать в лог что последняя версия файла ___222___ и имя файла |
Последний раз редактировалось composter, 15-12-2016 в 18:14. Причина: забыл дописать Отправлено: 18:13, 15-12-2016 | #18 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Обработка файлов ведётся в папке 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 ) ) |
------- Отправлено: 22:05, 15-12-2016 | #19 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать если все происходит вокруг одного файла и требуется именно это:
Цитата composter:
@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 |
|
Отправлено: 04:01, 16-12-2016 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
VBS/WSH/JS - Подсчет количества ini файлов в папке | XXXp | Скриптовые языки администрирования Windows | 14 | 10-04-2012 02:06 | |
CMD/BAT - [решено] Счетчик количества файлов | Arsenik77 | Скриптовые языки администрирования Windows | 1 | 28-08-2011 11:13 | |
CMD/BAT - Перемещение в папку определенного количества файлов | Arsenik77 | Скриптовые языки администрирования Windows | 1 | 18-07-2011 17:11 | |
Интерфейс - [решено] Переименование большого количества файлов | 7human7 | Microsoft Windows 2000/XP | 7 | 22-11-2008 09:48 | |
Проблема с начальным пакетом... | markizzz | Хочу все знать | 2 | 12-10-2003 18:46 |
|