|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка по названию файлов с расширением dbf |
|
CMD/BAT - Проверка по названию файлов с расширением dbf
|
Новый участник Сообщения: 48 |
В папку C:\SLTEST ежедневно в 21:00 скидывается файл(через wget с определенного сайта) с названием "SLдатазавтрашнегодня.dbf", например сегодня 02.06.2014, значит файл в 21:00 упадет с названием SL030614.DBF.Далее он должен переноситься в другую папку C:\Finish
Мне надо чтобы батник мог проверить что он скачал до переноса, вдруг на сайте не обновили файл DBF и скинет старый. Как он проверит название файла dbf на наличие даты завтрашнего дня? |
|
Отправлено: 22:32, 03-06-2014 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать FantomasAnand, если я Вас правильно понял, то этого вполне достаточно:
@echo off Color 0e rem http://forum.oszone.net/thread-283120.html rem задаем переменные: rem дата set DD=%date:~0,2% set DM=%date:~3,2% set DY=%date:~6,4% if %DD%==0? set DD=%date:~1,1% set /a DD=%DD%+1 if %DD% LSS 10 set DD=0%DD% if exist "C:\SLTEST\SL%DD%%DM%%DY%.dbf" move "C:\SLTEST\SL%DD%%DM%%DY%.dbf" "C:\Finish\SL%DD%%DM%%DY%.dbf" p.s. скрипт не учитывает количество дней в месяце и будет искать архив за 32 число, если запущен 31 но думаю 1 день не критично |
Последний раз редактировалось firstarey, 04-06-2014 в 14:17. Отправлено: 14:03, 04-06-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 48
|
Профиль | Отправить PM | Цитировать Firstarey, спасибо! А как учесть количество дней в месяце?Я слышал есть утилита Doff http://www.jfitz.com/dos/#DOFF , но как ее пристроить сюда...
|
Отправлено: 14:30, 04-06-2014 | #3 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать FantomasAnand, можно так поступить, но тут опять таки не учитываются високосные годы
@echo off Color 0e rem http://forum.oszone.net/thread-283120.html rem задаем переменные: set /a DD=1%date:~0,2%-100 set /a DM=1%date:~3,2%-100 set /a DY=%date:~-4% if %DM%==1 set Dmax=31 if %DM%==2 set Dmax=28 if %DM%==3 set Dmax=31 if %DM%==4 set Dmax=30 if %DM%==5 set Dmax=31 if %DM%==6 set Dmax=30 if %DM%==7 set Dmax=31 if %DM%==8 set Dmax=31 if %DM%==9 set Dmax=30 if %DM%==10 set Dmax=31 if %DM%==11 set Dmax=30 if %DM%==12 set Dmax=31 if %DD% == %Dmax% ( set DD=1 set /a DM=%DM%+1 ) else ( set /a DD=%DD%+1 ) if %DM% == 13 ( set DM=1 set /a DY=%DY%+1 ) if %DD% LSS 10 set DD=0%DD% if %DM% LSS 10 set DM=0%DM% if exist "C:\SLTEST\SL%DD%%DM%%DY%.dbf" move "C:\SLTEST\SL%DD%%DM%%DY%.dbf" "C:\Finish\SL%DD%%DM%%DY%.dbf" |
Отправлено: 15:04, 04-06-2014 | #4 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата FantomasAnand:
@Echo Off :: Процедуре передается число дней для смещения :: Положительное число - в будущее, отрицательное в прошлое Set N=1 Call :FromNow %N% Echo %DATE:~-4%%DATE:~3,2%%DATE:~,2% Echo %yyyymmdd% Pause Exit /B :FromNow SetLocal Set /A yyyy=%DATE:~-4%, mm=100%DATE:~3,2%%%100-14, dd=100%DATE:~,2%%%100 Set /A L=%~1+dd+36494+1461*(yyyy+4800+mm/12)/4+367*(mm+12-mm/12*12)/12-3*((yyyy+4900+mm/12)/100)/4 Set /A 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, dd=100+L-2447*J/80, L=J/11 Set /A mm=100+J+2-12*L, yyyy=100*(N-49)+I+L EndLocal& Set yyyymmdd=%yyyy%%mm:~-2%%dd:~-2% Exit /B |
||
Отправлено: 15:08, 04-06-2014 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Не будем вычислять дату завтрешнего дня - не нужно это. Нам надо переместить файл с датой в имени больше чем сегодняшняя. Если сегодня 02.06.2014, преобразуем сегодняшнюю (текущую системную) дату к числу 140602, из имени файла SL030614.DBF вычленим его дату и тоже преобразуем в число 140603. Файл(ы) с датой больше сегодняшней, то есть 140603>140602 перемещаем куда надо, остальные не трогаем
@Echo Off Set "Maska=Z:\SLTEST\sl??????.dbf" Set "Out=Z:\Finish\" Set "Now=%Date:~8,2%%Date:~3,2%%Date:~0,2%" SetLocal EnableExtensions EnableDelayedExpansion FOR %%f IN ("%Maska%") DO ( Set "fname=%%~nxf" Set "fdate=!fname:~6,2!!fname:~4,2!!fname:~2,2!" If !fdate! GTR %Now% Move /Y "%%f" "%Out%" >nul ) @Echo Off Set "Maska=Z:\SLTEST\sl??????.dbf" Set "Out=Z:\Finish\" FOR %%f IN ("%Maska%") DO if not exist "%Out%%%~nxf" Move "%%f" "%Out%" >nul Цитата:
![]() |
|
------- Последний раз редактировалось megaloman, 04-06-2014 в 20:58. Отправлено: 20:20, 04-06-2014 | #6 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
![]() в 4 и 5 сообщениях такого недочета нет. мне понравилось Ваше решение с преобразованием даты в число, но в от думаю второй вариант к данной конкретной задаче не совсем подойдет, ведь: Цитата FantomasAnand:
|
||
Отправлено: 06:27, 05-06-2014 | #7 |
Пользователь Сообщения: 102
|
Профиль | Отправить PM | Цитировать megaloman, немного изменил Ваш скрипт, убрал цикл, но идею сохранил и поместил в коллекцию
![]() ![]() |
Отправлено: 06:58, 05-06-2014 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Проверка в каталогах файлов с расширением .tmp | upward | Скриптовые языки администрирования Windows | 13 | 19-03-2014 00:48 | |
CMD/BAT - Проверка файлов в сетевом каталоге, и создание списка из тех которые по размеру < N | wonted | Скриптовые языки администрирования Windows | 21 | 17-03-2014 13:40 | |
CMD/BAT - Проверка файлов по сети | -Lesnik- | Скриптовые языки администрирования Windows | 3 | 01-03-2013 11:18 | |
Печать файлов с расширением prn | Boikov | Хочу все знать | 8 | 23-04-2011 18:24 | |
Программы для просмотра/редактирования файлов DBF | black dragon | Программное обеспечение Windows | 2 | 11-03-2008 20:31 |
|