PDA

Показать полную графическую версию : [решено] Проверка наличия файла с текущей датой и выполнения дальнейших команд.


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

Iska
26-06-2018, 22:50
каждый день падают архивы вида 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

YuS_2
27-06-2018, 09:12
Нужен скрипт проверяющий на момент своего запуска, что за данный день туда упал архив с текущей датой и в случае удачи запускал определенный батник, в случае неудачи - другой. »
Выше уже сказали, что для сравнения даты, её необходимо где-то взять, а в имени файла её нет.
Ну а сравнение числа в имени файла с текущим числом:
@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

megaloman
27-06-2018, 14:29
@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

VoidSteel
27-06-2018, 14:47
Извиняюсь не совсем полностью и корректно обрисовал задачу.
Вы правы, подразумевалось сравнение числа в имени файла с текущим числом месяца. Формат вывода даты в системе по умолчанию 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
Тестировал с и без актуального файла, в любом случае скрип выдает что файла на месте нету.

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

YuS_2
27-06-2018, 18:58
в любом случае скрип выдает что файла на месте нету. »
Значит вывод даты
Формат вывода даты в системе по умолчанию win server 2008 r2. »
не соответствует формату dd.MM.yyyy

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




© OSzone.net 2001-2012