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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск файла в каталогах и сравнение даты его создания

Ответить
Настройки темы
VBS/WSH/JS - Поиск файла в каталогах и сравнение даты его создания

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


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

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


Приветствую!

Прошу подсказать, как можно на VBS выполнить обход каталогов, на предмет отсутствия файла file.lock либо его старости, такой структуры:
z:\ops\dir01\lock\
...
z:\ops\dirXX\lock\

Алгоритм такой:
1. Начинаем обход каталогов по указанной структуре (dir01\lock\ - dirXX\lock\)
2. Как только находим каталог без файла file.lock либо с файлом file.lock но датой его создания более 60 минут назад, останавливаем поиск
3. Запускаем из этого каталога bat-скрипт wshShell.Run "cmd.exe /c z:\ops\" & SearchDir & "\start.bat", 0, False (т.е. bat-файл будет лежать на один уровень выше, чем file.lock)
4. Если каталог без файла file.lock не найден, либо файл file.lock создан не позднее 60 минут назад - выводим сообщение WScript.Echo "Пульты заняты"

Буду рад любым советам. Спасибо!

Отправлено: 16:16, 19-06-2020

 

Ветеран


Contributor


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

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


VBS
Код: Выделить весь код
If Not Pult("z:\ops", "dir", 2, "lock", "file.lock", "start.bat", 3600) Then WScript.Echo "Пульты заняты"
'-------------
Function Pult(DirPre, DirRoot, DirNlen, DirSuff, FileLock, FileBat, OldSec)
    Pult = False
    iii = 10000000
    
    With CreateObject("Scripting.FileSystemObject")
        For i = iii To iii + 10 ^ DirNlen - 1
            SearchDir = DirRoot + Right(CStr(i), DirNlen)
            dFile = DirPre + "\" + SearchDir + "\" + DirSuff
            If .FolderExists(dFile) Then
                iFile = dFile + "\" + FileLock
                If .FileExists(iFile) Then
                    Pult = DateDiff("s", .GetFile(iFile).DateLastModified, Now) > OldSec
                Else
                    Pult = True
                End If
                If Pult Then
                    ' MsgBox "cmd.exe /c " + DirPre + "\" + SearchDir + "\" + FileBat
                    CreateObject("WScript.Shell").Run "cmd.exe /c """ + DirPre + "\" + SearchDir + "\" + FileBat + """, 0, False"
                    Exit For
                End If
            End If
        Next
    End With
End Function

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


Последний раз редактировалось megaloman, 20-06-2020 в 15:25.

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

Отправлено: 15:18, 20-06-2020 | #11



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

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


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


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

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


megaloman супер, спасибо вам. Завтра протестирую.

Покажите, а если файл start.bat будет лежать не на уровень выше, а соседнем каталоге, т.е.:
z:\ops\dirXX\lock\file.lock
z:\ops\dirXX\init\start.bat

Cлишком ли грязным будет решение просто изменить первую строку на:
Код: Выделить весь код
If Not Pult("z:\ops", "dir", 2, "lock", "file.lock", "init\start.bat", 3600) Then WScript.Echo "Пульты заняты"
?

Отправлено: 21:47, 20-06-2020 | #12


Ветеран


Contributor


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

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


pedrosoft, Пропустили \
Код: Выделить весь код
If Not Pult("z:\ops", "dir", 2, "lock", "file.lock", "\Init\start.bat", 3600) Then WScript.Echo "Пульты заняты"
Ваше предложение работает, проверил.

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


Последний раз редактировалось megaloman, 21-06-2020 в 04:46.


Отправлено: 22:11, 20-06-2020 | #13


Ветеран


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

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


pedrosoft, переименуйте Ваш «start.bat» в какой-нибудь не «start» и «.cmd».
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:13, 20-06-2020 | #14



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск файла в каталогах и сравнение даты его создания

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла Tilaze Скриптовые языки администрирования Windows 1 29-03-2016 21:54
VBS/WSH/JS - изменение даты создания файла на минус Х дней nixdorf13 Скриптовые языки администрирования Windows 2 08-06-2015 14:26
Любой язык - [решено] Сравнение файлов в каталогах. NikolayHAOS Скриптовые языки администрирования Windows 21 18-11-2013 23:37
CMD/BAT - поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла vALUKARDin Скриптовые языки администрирования Windows 3 13-12-2012 19:32
CMD/BAT - [решено] Поиск файла в 2х дерикториях, сравнение версии и принятие решения i-Lex Скриптовые языки администрирования Windows 15 09-12-2012 17:02




 
Переход