Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка наличия файла с текущей датой и выполнения дальнейших команд. (http://forum.oszone.net/showthread.php?t=335493)

VoidSteel 26-06-2018 18:20 2819570

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

Iska 26-06-2018 22:50 2819603

Цитата:

Цитата 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


YuS_2 27-06-2018 09:12 2819644

Цитата:

Цитата 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

megaloman 27-06-2018 14:29 2819682

Не надо задумываться о цифрах в имени бэкапов, сравним дату изменения самого свежего файла с сегодняшней
Код:

@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 2819688

Извиняюсь не совсем полностью и корректно обрисовал задачу.
Вы правы, подразумевалось сравнение числа в имени файла с текущим числом месяца. Формат вывода даты в системе по умолчанию 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 2819698

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

YuS_2 27-06-2018 18:58 2819721

Цитата:

Цитата VoidSteel
в любом случае скрип выдает что файла на месте нету. »

Значит вывод даты
Цитата:

Цитата VoidSteel
Формат вывода даты в системе по умолчанию win server 2008 r2. »

не соответствует формату dd.MM.yyyy

Цитата:

Цитата VoidSteel
Каждый раз после выполнения появляется новый подключенный сетевой диск \\STORAGE\123\123 »

после команды popd этот диск автоматом должен отключаться...
Цитата:

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


Время: 17:06.

Время: 17:06.
© OSzone.net 2001-