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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск самой старой папки и вывод разницы между датой её создания и текущей

Ответить
Настройки темы
CMD/BAT - [решено] Поиск самой старой папки и вывод разницы между датой её создания и текущей

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


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

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


Добрый день, прошу сильно не пинать, но подскажите, возможно ли такое:
Имеется несколько локальных дисков 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 --- выводит имя самой старой вложенной папки на диске С

Отправлено: 19:39, 09-05-2018

 

Ветеран


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

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


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:02, 09-05-2018 | #2



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

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


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


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

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


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

Отправлено: 20:23, 09-05-2018 | #3


Ветеран


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

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


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

Отправлено: 20:27, 09-05-2018 | #4


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


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

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


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

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

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

под результатом имеется ввиду
Цитата Iska:
одну для всех найденных каталогов VIDEO »

Отправлено: 20:36, 09-05-2018 | #5


Ветеран


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

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


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

Отправлено: 20:42, 09-05-2018 | #6


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


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

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


Iska, да пример тут не имеет смысла, логика проста
HTML код: Выделить весь код
@echo off set /P var="Number: " Set Number=%var% :: Тут обрабатывается все что нужно сделать в зависимости от Number :: Здесь нужно выполнить WSH скрипт Set value=Результат WSH скрипта :: Тут обрабатывается все что нужно сделать в зависимости от value Pause

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

Отправлено: 20:49, 09-05-2018 | #7


Ветеран


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

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


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

играйтесь.

Отправлено: 21:01, 09-05-2018 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск самой старой папки и вывод разницы между датой её создания и текущей

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] батник для создания папки с текущей датой + время aggressor_ Скриптовые языки администрирования Windows 23 08-02-2018 16:02
CMD/BAT - Поиск файлов *.cer с заданной датой создания Альберт_25 Скриптовые языки администрирования Windows 25 13-08-2015 13:16
CMD/BAT - Поиск и удаление папки по имени архива, её породившего Zevs1998 Скриптовые языки администрирования Windows 0 13-03-2015 19:16
CMD/BAT - архивирование файла с текущей датой mcintosh55 Скриптовые языки администрирования Windows 1 22-12-2014 20:09
CMD/BAT - [решено] Проверить наличие файла с текущей датой. OlegStarov Скриптовые языки администрирования Windows 4 21-04-2009 12:11




 
Переход