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

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

Ответить
Настройки темы
CMD/BAT - [решено] Проверка наличия файла с текущей датой и выполнения дальнейших команд.

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


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

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


Доброго дня.
Если не трудно, нужна помощь в написании скрипта.
Темы похожие по сути просматривал, но у меня свои нюансы и коды с этих тем не подходят/не работают с моим кривым видоизменением.
Сама задача: В удаленную папку вида \\storage\123\123 каждый день падают архивы вида backup_XX.rar, где XX - число месяца на день архивации.
Нужен скрипт проверяющий на момент своего запуска, что за данный день туда упал архив с текущей датой и в случае удачи запускал определенный батник, в случае неудачи - другой.
Заранее спасибо.

Отправлено: 18:20, 26-06-2018

 

Ветеран


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

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


Цитата VoidSteel:
каждый день падают архивы вида backup_XX.rar, где XX - число месяца на день архивации.
Нужен скрипт проверяющий на момент своего запуска, что за данный день туда упал архив с текущей датой »
Это невозможно, поскольку как раз даты в имени файла нет, есть только день. Совпадение дня проверить можно.

На WSH:
Код: Выделить весь код
Option Explicit

Dim strSourceFolder


strSourceFolder = "\\storage\123\123"

With WScript.CreateObject("Scripting.FileSystemObject")
	If .FolderExists(strSourceFolder) Then
		If .FileExists(.BuildPath(strSourceFolder, "backup_" & Right("00" & CStr(Day(Now())), 2) & ".rar")) Then
			WScript.CreateObject("WScript.Shell").Run """%comspec%"" /c""c:\My Path\My batch1.cmd""", 1, True
		Else
			WScript.CreateObject("WScript.Shell").Run """%comspec%"" /c""c:\My Path\My batch2.cmd""", 1, True
		End If
	Else
		WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
		WScript.Quit 2
	End If
End With

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

Отправлено: 22:50, 26-06-2018 | #2



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

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


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата VoidSteel:
Нужен скрипт проверяющий на момент своего запуска, что за данный день туда упал архив с текущей датой и в случае удачи запускал определенный батник, в случае неудачи - другой. »
Выше уже сказали, что для сравнения даты, её необходимо где-то взять, а в имени файла её нет.
Ну а сравнение числа в имени файла с текущим числом:
Код: Выделить весь код
@echo off
set "fld=\\storage\123\123"
set "day=%date:~,2%"
pushd "%fld%"
for /f "tokens=2 delims=_." %%a in ('dir /b/a-d "*.rar"') do if %day% equ %%a (echo удача.bat) else (echo неудача.bat)
popd
но это с допущением того, что формат вывода даты в системе: dd.MM.yyyy

-------
scio me nihil scire. Ѫ


Отправлено: 09:12, 27-06-2018 | #3


Ветеран


Contributor


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

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


Не надо задумываться о цифрах в имени бэкапов, сравним дату изменения самого свежего файла с сегодняшней
Код: Выделить весь код
@Echo Off
cls
Set "BoxIn=\\storage\123\123"
Set "Mask=backup_??.rar"

Set /A Today=0

Pushd "%BoxIn%" &&(
	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\%Mask%" /B /A:-D /O:-D /T:W`) DO Call :Logica %Date% %%~tf &GoTo :Continue
	:Continue
	Popd
)
If %Today%==1 (Call :Today1) Else (Call :Today0)

pause
GoTo :Eof

:Logica
	Set /A Today=0
	If %1==%2 Set /A Today=1
GoTo :Eof

:Today0
	Echo today backup not exists
GoTo :Eof

:Today1
	Echo today backup exists
GoTo :Eof

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


Последний раз редактировалось megaloman, 27-06-2018 в 14:36.

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

Отправлено: 14:29, 27-06-2018 | #4


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


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

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


Извиняюсь не совсем полностью и корректно обрисовал задачу.
Вы правы, подразумевалось сравнение числа в имени файла с текущим числом месяца. Формат вывода даты в системе по умолчанию win server 2008 r2. Интересует именно код под bat файл.
Путем моих кривых совмещений с утилитой blat вышло следующее:

Код: Выделить весь код
@echo off
set "fld=\\STORAGE\123\123"
set "day=%date:~,2%"
pushd "%fld%"
for /f "tokens=2 delims=_." %%a in ('dir /b/a-d "*.rar"') do if %day% equ %%a (
rem *** Путь к программе blat.exe ***
set file_blat=C:\Users\123\Desktop\Blat\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=C:\Users\123\Desktop\Blat\reportok.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=C:\Users\123\Desktop\Blat\Blat.txt
rem *** Путь к файлу с адресами получателей ***
set file_to=C:\Users\123\Desktop\Blat\mail_list.txt
rem *** Тема сообщения ***
set to_subject="backed up OK!"

rem *** Данные отправителя ***
set from_server=mail.123.ru
set from_port=25
set from_mail=123@123.ru
set from_name=123@123.ru
set from_pass=123

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -tf %file_to% -s %to_subject% -log %file_log%

pause) else (
rem *** Путь к программе blat.exe ***
set file_blat=C:\Users\123\Desktop\Blat\blat.exe
rem *** Путь к файлу с текстом сообщения ***
set file_text=C:\Users\123\Desktop\Blat\reportfail.txt
rem *** Путь к файлу для сохранения лога ***
set file_log=C:\Users\123\Desktop\Blat\Blat.txt
rem *** Путь к файлу с адресами получателей ***
set file_to=C:\Users\123\Desktop\Blat\mail_list.txt
rem *** Тема сообщения ***
set to_subject="backup FAIL!"

rem *** Данные отправителя ***
set from_server=mail.123.ru
set from_port=25
set from_mail=123@123.ru
set from_name=123@123.ru
set from_pass=123

rem *** Отправка сообщения ***
%file_blat% %file_text% -server %from_server%:%from_port% -f %from_mail% -u %from_name% -pw %from_pass% -tf %file_to% -s %to_subject% -log %file_log%

pause)
popd
Каждый раз после выполнения появляется новый подключенный сетевой диск \\STORAGE\123\123
Тестировал с и без актуального файла, в любом случае скрип выдает что файла на месте нету.

Отправлено: 14:47, 27-06-2018 | #5


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


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

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


Пока писал пост, пришел новый вариант от megaloman. :-)
С этим кодом все корректно работает, премного благодарен.
Спасибо всем, кто потратил на решение данного вопроса свое время.

Отправлено: 15:58, 27-06-2018 | #6


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата VoidSteel:
в любом случае скрип выдает что файла на месте нету. »
Значит вывод даты
Цитата VoidSteel:
Формат вывода даты в системе по умолчанию win server 2008 r2. »
не соответствует формату dd.MM.yyyy

Цитата VoidSteel:
Каждый раз после выполнения появляется новый подключенный сетевой диск \\STORAGE\123\123 »
после команды popd этот диск автоматом должен отключаться...
Цитата:
Если указан сетевой путь, команда PUSHD создает временное имя диска,
указывающее на заданный сетевой ресурс, а затем производит смену текущего
диска и каталога, используя вновь определенное имя диска.
Выделение временных имен дисков проводится в обратном порядке начиная
с Z:, причем выбирается первое свободное имя диска.

-------
scio me nihil scire. Ѫ


Отправлено: 18:58, 27-06-2018 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Копирование на ftp файла с текущей датой Gooks Скриптовые языки администрирования Windows 0 14-06-2018 14:38
CMD/BAT - [решено] Логирование выполнения команд с датой и временем Pank Скриптовые языки администрирования Windows 5 28-11-2017 16:53
CMD/BAT - архивирование файла с текущей датой mcintosh55 Скриптовые языки администрирования Windows 1 22-12-2014 20:09
CMD/BAT - Сранение даты из файла с текущей датой InVariable Скриптовые языки администрирования Windows 0 07-02-2012 11:53
CMD/BAT - [решено] Проверить наличие файла с текущей датой. OlegStarov Скриптовые языки администрирования Windows 4 21-04-2009 12:11




 
Переход