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

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

Ответить
Настройки темы
CMD/BAT - [решено] %DATE% минус рабочий день.

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


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

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


Добрый день,

Есть две директории одна( D:\STOPotchet\rar\ ) с архиво, другая (D:\STOPotchet\rar\date с фаилом подтверждений для архива. Необходимо при отсутствии файла подтверждений для соответствуещего архива, запускать скрипт.
Вот что у меня вышло для статических папок, проверка работает. Проблема в том что эту проверку нужно запускать каждый день. в директории D:\STOPotchet\rar\ каждый день создается папка, с названием %DATE:~0,2%%DATE:~3,2%%DATE:~8,2%. А проверку нужно запускать для предыдущего РАБОЧЕГО дня. Может кто идей подкинет?

@echo off
if %1.==. exit
SET FDIR=D:\STOPotchet\rar\

"C:\Program Files\WinRAR\rar.exe" x D:\STOPotchet\*.rar TRAFN*.arj D:\STOPotchet\rar\%DATE:~0,2%%DATE:~3,2%%DATE:~8,2%\


echo --------------------------------------------------------------------------------------------------
: проверим все ли отправили что подготовили
for %%i in (D:\STOPotchet\rar\%DATE:~0,2%%DATE:~3,2%%DATE:~8,2%\*.arj) do call :ch %%~nxi
goto end


:ch
SET FTRAFN=%1
SET FIZV=IZV_%FTRAFN:~6,12%.txt

echo %DATE% %TIME% - %FTRAFN% - ищем %FIZV%

if not exist %FDIR%\%FIZV% (
N:\send_psi.vbs "ALARM"
echo %DATE% %TIME% - %FTRAFN% - ALARM
)

exit /b


goto end
:-------------------------------------------------------------------------------
:end

Отправлено: 16:36, 30-04-2013

 

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


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

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


Если кто не понял. Тут D:\STOPotchet\izv\ создаются папки вида 010203(дата)
Необходимо что бы тут SET FDIR=D:\STOPotchet\rar\ каким то образом выбиралась папка с датой предыдущего рабочего дня.

Отправлено: 16:39, 30-04-2013 | #2



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

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


Ветеран


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

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


Есть очень простое решение. Для начала вручную создаём файл Date.log и вписываем в него вчерашнюю дату в нужном формате. Далее:

Код: Выделить весь код
@ECHO OFF
FOR /F %%I IN (Date.log) DO (
  IF NOT %%I==%DATE:~0,2%%DATE:~3,2%%DATE:~8,2% (
    SET FDIR=D:\STOPotchet\rar\%%I
) ELSE EXIT
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::Здесь необходимые операции:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::Переписывем LOG-файл, заменяя дату на текущую (на следущий день она станет вчерашней)::::
ECHO %DATE:~0,2%%DATE:~3,2%%DATE:~8,2%>Date.log
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:32, 30-04-2013 | #3


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


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

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


Спасибо огромное, это то что мне было нужно! Все заработало.

Отправлено: 10:11, 06-05-2013 | #4


Ветеран


Contributor


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

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


Цитата:
в директории D:\STOPotchet\rar\ каждый день создается папка, с названием %DATE:~0,2%%DATE:~3,2%%DATE:~8,2%. А проверку нужно запускать для предыдущего РАБОЧЕГО дня.
При условии, что сегодня папка уже создана, а надо взять вчерашнюю (точнее - за предыдущий раб день), и в директории D:\STOPotchet\rar\ нет лишних поддиректорий, не связанных с датами, вот решение без каких-либо служебных файлов
Код: Выделить весь код
@Echo Off

Set Where=D:\STOPotchet\rar\

FOR /F "usebackq skip=1 delims=" %%D IN (`Dir "%Where%" /B /A:D /O:-D /T:C`) DO Set DirName=%Where%%%D\& GoTo :Continue
:Continue

Echo %DirName%
Как это работает: Команда Dir с применёнными ключами выдаёт список поддиректорий отсортированных по дате создания (вначале самая свежая), For в этом списке пропускает первую поддиректорию ("сегодняшняя") и при исполнении присваивает переменной %DirName% полный путь предыдущей по списку директории ("вчерашней").

При таком подходе обработку можно запускать хоть несколько раз, в случае же с лог-файлом после того, как он перепишется, информация о вчерашнем имени теряется и батник будет работать неправильно.

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


Последний раз редактировалось megaloman, 06-05-2013 в 11:47.


Отправлено: 11:40, 06-05-2013 | #5


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


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

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


Вот функция, которая показывает вчерашнюю дату:

Код: Выделить весь код
@echo off
::Показать дату, которая была 1 день назад
call :fromnow -1
echo %ddmmyyyy%
pause>nul
goto :eof
 
:FromNow
setLocal
set now=%date%
set /a yyyy=%now:~-4%
set /a mm=1%now:~3,2%-100
set /a dd=1%now:~,2%-100
set /a JD=%~1+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%
exit /b

-------
Alex Dragokas

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

Отправлено: 17:46, 06-05-2013 | #6


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


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

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


Diskretor, Спасибо добрый человек, может пригодится, но для моих целей не подходит. Потому что в понедельник надо проверять папку за пятницу.

Отправлено: 09:56, 08-05-2013 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] текущая дата минус один день. dvassilyev Скриптовые языки администрирования Windows 19 29-09-2021 19:19
Обновленные Apple MacBook Pro: минус SSD, плюс Thunderbolt OSZone News Новости железа 0 24-02-2011 20:30
CMD/BAT - [решено] формат даты для имени нового архива %date:~6,4%\%date:~3,2%\%~n1_%date:~0,2% RUVATA Скриптовые языки администрирования Windows 5 05-08-2010 08:43
Заглушить звук саксофона в аудиофайле, чтобы оставить только минус. Drem Хочу все знать 4 16-04-2010 17:19
"День 7" - на носу: Windows 7 осталось ждать один день OSZone News Новости и события Microsoft 0 21-10-2009 12:30




 
Переход