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