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

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

Ответить
Настройки темы
CMD/BAT - Проверка по названию файлов с расширением dbf

Новый участник


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

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


В папку C:\SLTEST ежедневно в 21:00 скидывается файл(через wget с определенного сайта) с названием "SLдатазавтрашнегодня.dbf", например сегодня 02.06.2014, значит файл в 21:00 упадет с названием SL030614.DBF.Далее он должен переноситься в другую папку C:\Finish
Мне надо чтобы батник мог проверить что он скачал до переноса, вдруг на сайте не обновили файл DBF и скинет старый. Как он проверит название файла dbf на наличие даты завтрашнего дня?

Отправлено: 22:32, 03-06-2014

 

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


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

Профиль | Отправить 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
Благодарности: 1

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


Firstarey, спасибо! А как учесть количество дней в месяце?Я слышал есть утилита Doff http://www.jfitz.com/dos/#DOFF , но как ее пристроить сюда...

Отправлено: 14:30, 04-06-2014 | #3


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


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

Профиль | Отправить 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


Аватара для gora

Ушёл из жизни


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

Профиль | Отправить 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


Ветеран


Contributor


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

Профиль | Отправить 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
firstarey,
Цитата:
скрипт не учитывает количество дней в месяце и будет искать архив за 32 число, если запущен 31
но думаю 1 день не критично
не совсем въехал, Ваш скрипт каждый последний день месяца будет работать криво? Искать несуществующий завтрашний день, при этом игнорировать реальный?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-06-2014 в 20:58.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:20, 04-06-2014 | #6


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


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

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


Цитата megaloman:
Ваш скрипт каждый последний день месяца будет работать криво? »
это было экспресс решение
в 4 и 5 сообщениях такого недочета нет.

мне понравилось Ваше решение с преобразованием даты в число, но в от думаю второй вариант к данной конкретной задаче не совсем подойдет, ведь:
Цитата FantomasAnand:
вдруг на сайте не обновили файл DBF и скинет старый »

Отправлено: 06:27, 05-06-2014 | #7


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


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

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


megaloman, немного изменил Ваш скрипт, убрал цикл, но идею сохранил и поместил в коллекцию

Код: Выделить весь код
@echo off
Color 0e
rem http://forum.oszone.net/thread-283120.html
Set ndate=%Date:~8,2%%Date:~3,2%%Date:~0,2%
For %%i in ("C:\SLTEST\*.dbf") do set fname=%%~nxi
Set fdate=%fname:~6,2%%fname:~4,2%%fname:~2,2%
If  %fdate% GTR %ndate% Move /Y "C:\SLTEST\%fname%" "C:\Finish\"

Отправлено: 06:58, 05-06-2014 | #8



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

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

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




 
Переход