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

Ответить
Аватара пользователя
VoidSteel

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

Сообщение VoidSteel »

Доброго дня.

Если не трудно, нужна помощь в написании скрипта.

Темы похожие по сути просматривал, но у меня свои нюансы и коды с этих тем не подходят/не работают с моим кривым видоизменением.

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

Нужен скрипт проверяющий на момент своего запуска, что за данный день туда упал архив с текущей датой и в случае удачи запускал определенный батник, в случае неудачи - другой.

Заранее спасибо.
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата VoidSteel:



каждый день падают архивы вида backup_XX.rar, где XX - число месяца на день архивации.

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




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



На 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

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

Сообщение YuS_2 »

Цитата VoidSteel:



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




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

Ну а сравнение числа в имени файла с текущим числом:



Код:

Код: Выделить всё

@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

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

Сообщение megaloman »

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

[spoiler]Код:
[/spoiler]

Код: Выделить всё

@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

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

Сообщение VoidSteel »

Извиняюсь не совсем полностью и корректно обрисовал задачу.

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

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

Сообщение VoidSteel »

Пока писал пост, пришел новый вариант от megaloman. :-)

С этим кодом все корректно работает, премного благодарен.

Спасибо всем, кто потратил на решение данного вопроса свое время.
Аватара пользователя
VoidSteel

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

Сообщение VoidSteel »

Цитата VoidSteel:



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




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


Цитата VoidSteel:



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




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




Цитата VoidSteel:



Каждый раз после выполнения появляется новый подключенный сетевой диск \\STORAGE\123\123
CMD/BAT - [решено] Проверка наличия файла с текущей датой и выполнения дальнейших команд.




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


Цитата:



Если указан сетевой путь, команда PUSHD создает временное имя диска,

указывающее на заданный сетевой ресурс, а затем производит смену текущего

диска и каталога, используя вновь определенное имя диска.

Выделение временных имен дисков проводится в обратном порядке начиная

с Z:, причем выбирается первое свободное имя диска.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»