|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Некорректно отрабатывает скрипт, помогите найти ошибку. |
|
CMD/BAT - [решено] Некорректно отрабатывает скрипт, помогите найти ошибку.
|
Пользователь Сообщения: 106 |
Не могу понять почему некорректно отрабатывает скрипт.
Скрипт должен брать из списка название файла. Потом упаковывать есть в zip, добавляя к названию файла дату изменения файла. После чего тестировать архи, если архив нормальный, то исходный файл удаляется. Скрипт: @echo off set list="c:\temp\list.txt" cd "C:\Program Files\7-Zip" Setlocal EnableDelayedExpansion for /f "usebackq delims=" %%x in (%list%) do ( call :yesterday "%%x" set day_file=!ddmmyyyy:~0,2! set month_file=!ddmmyyyy:~3,2! set year_file=!ddmmyyyy:~6,4! @echo on 7z a -tzip "%%x_!year_file!-!month_file!-!day_file!.zip" "%%x" 7z t "%%x_!year_file!-!month_file!-!day_file!.zip" |>nul find /i "Everything is Ok" && (echo del /q "%%x") || (echo Битый) @echo off ) :yesterday for /f %%i in ("%~1") do set data_modifed=%%~ti Set day_minus=0 Set yyyy=%data_modifed:~6,4% Set /A mm=100%data_modifed:~3,2%%%100 Set /A dd=100%data_modifed:~,2%%%100 Set /A JD=%day_minus%+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal& Set ddmmyyyy=%dd:~-2%.%mm:~-2%.%yyyy% 1. Почему то для первых двух файлов дата изменения берется от первого файла, для третьего дата модификации от второго, у четвертого от третьего и так далее. 2. После тестирования не удаляются файлы. Плюс хотелось бы прикрутить логирование, чтобы видно было какие файлы были обработаны, а какие пропущены. P.s. Разбираюсь в скриптах не сильно, компоновал на основе других батников. |
|
Отправлено: 17:22, 30-07-2018 |
Пользователь Сообщения: 106
|
Профиль | Отправить PM | Цитировать Ошибки нашел сам. А вот как логирование прикрутить идей нет.
|
Последний раз редактировалось Falcon99, 30-07-2018 в 17:59. Отправлено: 17:27, 30-07-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Не вижу смысла в:
Цитата Falcon99:
Аналогично с: Цитата Falcon99:
Цитата:
Цитата Falcon99:
|
||||
Отправлено: 18:18, 30-07-2018 | #3 |
Пользователь Сообщения: 106
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Просто никогда не работал с ERRORLEVEL и даже не представляю как его делать. Да и вариант через тестирование делал потому как файлы это бэкапы на NAS и не хотелось бы чтобы потом с ними проблемы были. Цитата Iska:
Поэтому думаю может брать строчку от теста. Т.е. что-то подобное "путь\файл - ок". |
||
Отправлено: 18:27, 30-07-2018 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Falcon99:
Цитата Falcon99:
Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set list=c:\temp\list.txt set sLog=c:\temp\Log.txt for /f "usebackq delims=" %%x in ("%list%") do ( call :yesterday "%%x" set day_file=!ddmmyyyy:~0,2! set month_file=!ddmmyyyy:~3,2! set year_file=!ddmmyyyy:~6,4! "%ProgramFiles%\7-Zip\7z.exe" a -tzip "%%x_!year_file!-!month_file!-!day_file!.zip" "%%x" && ( echo File [%%x] added into archive [%%x_!year_file!-!month_file!-!day_file!.zip] successfully. >>"%sLog%" echo echo %date:~0,8% %time:~0,8% File [%%x] added into archive [%%x_!year_file!-!month_file!-!day_file!.zip] successfully. del /q "%%x" ) || ( echo Error occured while creating archive [%%x_!year_file!-!month_file!-!day_file!.zip]. >>"%sLog%" echo echo %date:~0,8% %time:~0,8% Error occured while creating archive [%%x_!year_file!-!month_file!-!day_file!.zip]. ) ) endlocal exit /b 0 :yesterday for /f %%i in ("%~1") do set data_modifed=%%~ti Set day_minus=0 Set yyyy=%data_modifed:~6,4% Set /A mm=100%data_modifed:~3,2%%%100 Set /A dd=100%data_modifed:~,2%%%100 Set /A JD=%day_minus%+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4 Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001 Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11 Set /A J=J+2-12*L,I=100*(N-49)+I+L Set /A yyyy=I,mm=100+J,dd=100+K EndLocal& Set ddmmyyyy=%dd:~-2%.%mm:~-2%.%yyyy% Цитата Falcon99:
|
||||
Отправлено: 19:41, 30-07-2018 | #5 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Цитата Iska:
ошибки записи проявляются только при чтении |
|
Отправлено: 20:48, 30-07-2018 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Busla:
Цитата Busla:
![]() P.S. В WinRAR, помнится, по сю пору есть вариант «создать архив и сразу его протестировать», но в 7-Zip нету — команды a и t могут применяться только раздельно. |
||
Отправлено: 21:18, 30-07-2018 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочие БД - Клиентское ПО некорректно отрабатывает после перехода с ХР на 2003 | Astapus | Программирование и базы данных | 2 | 13-05-2013 11:56 | |
C/C++ - Помогите найти ошибку | Bokslaitner | Программирование и базы данных | 3 | 01-11-2012 22:03 | |
помогите найти ошибку | igor7 | Программирование в *nix | 1 | 07-02-2011 09:55 | |
[решено] Некорректно отрабатывает скрипт финализации | saavaage | AutoIt | 4 | 01-08-2010 14:28 | |
C/C++ - Помогите найти ошибку | KEKS-KEKS | Программирование и базы данных | 9 | 01-11-2007 20:30 |
|