Компьютерный форум 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=334747)

wlad1164 09-05-2018 19:39 2812834

Поиск самой старой папки и вывод разницы между датой её создания и текущей
 
Добрый день, прошу сильно не пинать, но подскажите, возможно ли такое:
Имеется несколько локальных дисков C,D,E,F,G... может быть 2-7 шт, на некоторых из них есть папка "VIDEO" в которой множество подпапок, нужно скриптом найти самую "старую" по дате создания папку среди всех подпапок в папках VIDEO всех локальных дисков где она есть, вывести дату создания той самой папки и если возможно : количество дней с момента создания до текущего момента.

Структура примерно такая:
X:\VIDEO\aa-bb-cc dd
где: X-Буква локального диска, кол-во дисков может быть разным на разных ПК, папки VIDEO тоже может не быть на некоторых дисках
aa-число от 01-31
bb-число от 01-12
cc-число от 01-10
dd-число от 01-24

В написании скриптов у меня совсем слабо, с помощью гугла поулчилось найти самую старую папку aa-bb-cc dd на каждом диске, но как их сравнить между собой не понятно...

cd/d "C:\VIDEO\"&& for /f "delims=" %%i in ('2^>nul dir/A:D/B/O:D') do set folderC=%%i --- выводит имя самой старой вложенной папки на диске С

Iska 09-05-2018 20:02 2812838

wlad1164, Вам «самую старую» для каждого из найденных каталогов VIDEO? Или одну для всех найденных каталогов VIDEO? Если второе — то вот Вам на WSH:
Код:

Option Explicit

Dim objDrive
Dim objFolder

Dim dtOldestDateCreated
Dim objOldestFolder


dtOldestDateCreated = #01/01/2100#
Set objOldestFolder = Nothing

With WScript.CreateObject("Scripting.FileSystemObject")
        For Each objDrive In .Drives
                If .FolderExists(objDrive.DriveLetter & ":\Video") Then
                        For Each objFolder In .GetFolder(objDrive.DriveLetter & ":\Video").SubFolders
                                If objFolder.DateCreated < dtOldestDateCreated Then
                                        dtOldestDateCreated = objFolder.DateCreated
                                        Set objOldestFolder = objFolder
                                End If
                        Next
                End If
        Next
       
        If Not objOldestFolder Is Nothing Then
                WScript.Echo "Path to folder: " & objOldestFolder.Path
                WScript.Echo "Date created:  " & objOldestFolder.DateCreated
                WScript.Echo "Day differense: " & DateDiff("d", objOldestFolder.DateCreated, Now())
               
                WScript.CreateObject("WScript.Shell").Run "explorer.exe """ & objOldestFolder.Path & """", 1, False
        Else
                WScript.Echo "Nothing found."
                WScript.Quit 1
        End If
End With

WScript.Quit 0


wlad1164 09-05-2018 20:23 2812844

Iska, спасибо за столь скорый ответ! Но хотелось бы решения в cmd, или результат как то передать bat скрипт, просто нужно добавить этот фрагмент в текущий bat скрипт.
Еще раз спасибо что не поленились написать код

Iska 09-05-2018 20:27 2812846

wlad1164, что именно — передать? Покажите код Вашего пакетного файла, укажите место, куда Вы хотите добавить новый код.

wlad1164 09-05-2018 20:36 2812849

Iska, передать результат, грубо говоря в процессе работы bat вызвать wsh скрипт который отработает и вернет в bat переменную=результату своей работы, и далее продолжится выполнение bat скрипта

Что то вроде этого.

test.bat
---------------------------
выполнение скрипта
запуск whs из bat
получить результат whs скрипта в переменную bat
продолжение выполнения bat скрипта
---------------------------

под результатом имеется ввиду
Цитата:

Цитата Iska
одну для всех найденных каталогов VIDEO »


Iska 09-05-2018 20:42 2812850

wlad1164, повторяю: покажите код Вашего пакетного файла, укажите место, куда Вы хотите добавить новый код.

wlad1164 09-05-2018 20:49 2812851

Iska, да пример тут не имеет смысла, логика проста
HTML код:

@echo off
set /P var="Number: "
Set Number=%var%
:: Тут обрабатывается все что нужно сделать в зависимости от Number

:: Здесь нужно выполнить WSH скрипт
Set value=Результат WSH скрипта
:: Тут обрабатывается все что нужно сделать в зависимости от value
Pause

Как то так, вроде все словами описал выше))))

Iska 09-05-2018 21:01 2812854

wlad1164, ну, не хотите — как хотите. Вот Вам:
Sample.vbs
Код:

Option Explicit

Dim objDrive
Dim objFolder

Dim dtOldestDateCreated
Dim objOldestFolder


dtOldestDateCreated = #01/01/2100#
Set objOldestFolder = Nothing

With WScript.CreateObject("Scripting.FileSystemObject")
        For Each objDrive In .Drives
                If .FolderExists(objDrive.DriveLetter & ":\Video") Then
                        For Each objFolder In .GetFolder(objDrive.DriveLetter & ":\Video").SubFolders
                                If objFolder.DateCreated < dtOldestDateCreated Then
                                        dtOldestDateCreated = objFolder.DateCreated
                                        Set objOldestFolder = objFolder
                                End If
                        Next
                End If
        Next
       
        If Not objOldestFolder Is Nothing Then
                WScript.Echo objOldestFolder.Path
        End If
End With

WScript.Quit 0

Sample.cmd
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set /p var="Number: "
set Number=%var%

rem Тут обрабатывается все что нужно сделать в зависимости от Number

rem Здесь нужно выполнить WSH скрипт
for /f "usebackq delims=" %%i in (
        `cscript.exe //nologo "%~dp0Sample.vbs"`
        ) do set sFolder=%%~i

if defined sFolder (
        echo [%sFolder%]
        rem Тут обрабатывается все что нужно сделать в зависимости от sFolder
        pause
) else (
        echo Nothing found
        exit /b 1
)

endlocal
exit /b 0


играйтесь.


Время: 11:27.

Время: 11:27.
© OSzone.net 2001-