Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Некорректно отрабатывает скрипт, помогите найти ошибку.

Ответить
Настройки темы
CMD/BAT - [решено] Некорректно отрабатывает скрипт, помогите найти ошибку.

Аватара для Falcon99

Пользователь


Сообщения: 106
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: Falcon99
Дата: 30-07-2018
Не могу понять почему некорректно отрабатывает скрипт.
Скрипт должен брать из списка название файла. Потом упаковывать есть в 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

 

Аватара для Falcon99

Пользователь


Сообщения: 106
Благодарности: 1

Профиль | Отправить PM | Цитировать


Ошибки нашел сам. А вот как логирование прикрутить идей нет.

Последний раз редактировалось Falcon99, 30-07-2018 в 17:59.


Отправлено: 17:27, 30-07-2018 | #2



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

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


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Не вижу смысла в:
Цитата Falcon99:
cd "C:\Program Files\7-Zip" »
Просто указывайте полный путь к 7z.exe.

Аналогично с:
Цитата Falcon99:
После чего тестировать архи, »
После архивирования просто анализируете код возврата 7z.exe:
Цитата:
7-Zip returns the following exit codes:

Code Meaning
0 No error
1 Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed.
2 Fatal error
7 Command line error
8 Not enough memory for operation
255 User stopped the process
Цитата Falcon99:
Плюс хотелось бы прикрутить логирование, чтобы видно было какие файлы были обработаны, а какие пропущены. »
А в чём, собственно, проблема-то?

Отправлено: 18:18, 30-07-2018 | #3


Аватара для Falcon99

Пользователь


Сообщения: 106
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата Iska:
После архивирования просто анализируете код возврата 7z.exe: »
Т.е. вы предлагает не делать тестирование, а анализировать код возврата архиватора?
Просто никогда не работал с ERRORLEVEL и даже не представляю как его делать.
Да и вариант через тестирование делал потому как файлы это бэкапы на NAS и не хотелось бы чтобы потом с ними проблемы были.

Цитата Iska:
А в чём, собственно, проблема-то? »
Просто не представляю по какому принципу делать лог. Т.к. при архивировании выводится куча дополнительной информации которая там не нужна.
Поэтому думаю может брать строчку от теста. Т.е. что-то подобное "путь\файл - ок".

Отправлено: 18:27, 30-07-2018 | #4


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Falcon99:
Т.е. вы предлагает не делать тестирование, а анализировать код возврата архиватора? »
Да.

Цитата Falcon99:
Просто никогда не работал с ERRORLEVEL и даже не представляю как его делать. »
Проще всего — посредством операторов && и ||, которые присутствуют и в Вашем коде. Например (не проверялось):
Скрытый текст
Код: Выделить весь код
@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
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата Iska:
После архивирования просто анализируете код возврата 7z.exe: »
лет с десять назад топ популярных архиаторов (7zip, WinRar, WinZip) положительно рапортовал о создании много-терабайтного архива, который потом не открывался (сходу пруф не нашёл)

ошибки записи проявляются только при чтении

Отправлено: 20:48, 30-07-2018 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Busla:
лет с десять назад топ популярных архиаторов (7zip, WinRar, WinZip) положительно рапортовал о создании много-терабайтного архива, который потом не открывался (сходу пруф не нашёл) »
Всё может быть. Если проблема внутри приложения — естественно, что это не проявится на данном уровне.

Цитата Busla:
ошибки записи проявляются только при чтении »
Я было хотел в своём первом сообщении упомянуть, что тестирование после создания имело место быть во времена дискет и дисков MFM и тогда имело смысл, но не сейчас .

P.S. В WinRAR, помнится, по сю пору есть вариант «создать архив и сразу его протестировать», но в 7-Zip нету — команды a и t могут применяться только раздельно.

Отправлено: 21:18, 30-07-2018 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Некорректно отрабатывает скрипт, помогите найти ошибку.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - Клиентское ПО некорректно отрабатывает после перехода с ХР на 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




 
Переход