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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Добавить фильтр в скрипт.

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


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

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


Изменения
Автор: Rey71
Дата: 06-07-2018
День добрый.
Имеется следующий скрипт (найден в просторах инета) - поворачивает файлы картинок в текущей папке и подпапках в альбомную ориентацию. Отлично работает.
Необходимо добавить условие чтобы обрабатывались только файлы с текущей датой создания (либо начинать с текущая дата минус 1 день), старше файлы не обрабатывать.
Как это можно добавить?
Код: Выделить весь код
<job>
<script language="JScript">

  var fs =new ActiveXObject("Scripting.FilesystemObject");
  var gfl=new ActiveXObject("GFLAx.GFLAx"); // GFLAx Free component (c) Pierre-E Gougelet
  var n=0;
  var t= Date();
    var pics=dir(".",/jpg$/i).files;    // список картинок *.jpg
  for(i in pics)
   rotate(pics[i]);            // их разворот

  WSH.echo("OK. Повернуто файлов: "+n);

// ==============================================================

function rotate(file)        // разворот катинки
{
  with(gfl)
  {
   LoadBitmap(file);
   if(Width>Height) return;
   Rotate(-90);
//   try{file.name=file.name+".bak"} catch(e){};
   SaveJPEGQuality=95;
   SaveKeepMetadata=true;
   SaveBitmap(fs.GetParentFolderName(file)+"\\"+fs.GetFileName(file));
   n++;
  }
}

function dir(f,filter,n)    // dir.folders[] - подпапки папки f
{                // dir.files[]     - файлы папки f
  var fs=new ActiveXObject("Scripting.FilesystemObject");
  if(!f.files) var n=1,f={folders:[fs.GetFolder(f)],files:[]};
  for(var e=new Enumerator(f.folders[n-1].files); !e.atEnd(); e.moveNext())
   if(e.item().name.match(filter||"")) f.files.push(e.item());
  for(var e=new Enumerator(f.folders[n-1].SubFolders); !e.atEnd(); e.moveNext())
   dir(f,filter,f.folders.push(e.item()));
  return f;
}
</script>
</job>

Отправлено: 09:37, 06-07-2018

 

Ветеран


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

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


Rey71, на VBScript устроит?
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objGFLAx


Set objFSO   = WScript.CreateObject("Scripting.FileSystemObject")
Set objGFLAx = WScript.CreateObject("GFLAx.GFLAx")

ScanSubFolders objFSO.GetFolder(WScript.CreateObject("WScript.Shell").CurrentDirectory)

Set objGFLAx = Nothing
Set objFSO   = Nothing

WScript.Quit 0

Sub ScanSubFolders(objFolder)
	Dim objFile
	Dim objSubFolder
	Dim strFilePath
	
	WScript.StdOut.WriteLine objFolder.Path
	
	For Each objFile In objFolder.Files
		Select Case LCase(objFSO.GetExtensionName(objFile.Name))
			Case "jpg", "jpeg", "jpe"
				WScript.StdOut.Write vbTab
				
				With objGFLAx
					.LoadBitmap(objFile.Path)
					
					If .Width < .Height Then
						WScript.StdOut.WriteLine "+ " & objFile.Path
						
						.Rotate -90
						
						.SaveJPEGQuality  = 95
						.SaveKeepMetadata = True
						
						strFilePath = objFile.Path
						objFile.Name = objFile.Name & ".bak"
						.SaveBitmap strFilePath
					Else
						WScript.StdOut.WriteLine "- " & objFile.Path
					End If
				End With
			Case Else
				' Nothing to do
		End Select
	Next
	
	For Each objSubFolder In objFolder.SubFolders
		ScanSubFolders objSubFolder
	Next
End Sub
Работает под cscript.exe (из-за прямого вывода — для красоты — в StdOut). Единственное, что мне не нравится — работа с текущим каталогом, а не с заданным параметром скрипта. Ну, да ладно.

Обычно же такие вещи реализуют посредством ImageMagick.
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 06-07-2018 | #2



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

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


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


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

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


Все работает. Спасибо большое.
А как в Вашем скрипте задается выбор файлов с текущей датой создания? Ткните носом в строчку, плиз ))).

Отправлено: 07:12, 09-07-2018 | #3


Ветеран


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

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


Цитата Rey71:
А как в Вашем скрипте задается выбор файлов с текущей датой создания? Ткните носом в строчку, плиз ))). »
Хмм… А некуда тыкать. То, что было про текущую дату в тексте сообщения — совершенно запамятовал сделать после перевода на VBScript . Приношу Вам свои извинения.

Пробуйте:
Код: Выделить весь код
Option Explicit

Dim strSourceFolder

Dim objFSO
Dim objGFLAx


Set objFSO   = WScript.CreateObject("Scripting.FileSystemObject")
Set objGFLAx = WScript.CreateObject("GFLAx.GFLAx")

ScanSubFolders objFSO.GetFolder(WScript.CreateObject("WScript.Shell").CurrentDirectory)

Set objGFLAx = Nothing
Set objFSO   = Nothing

WScript.Quit 0

Sub ScanSubFolders(objFolder)
	Dim objFile
	Dim objSubFolder
	Dim strFilePath
	
	WScript.StdOut.WriteLine objFolder.Path
	
	For Each objFile In objFolder.Files
		Select Case LCase(objFSO.GetExtensionName(objFile.Name))
			Case "jpg", "jpeg", "jpe"
				If DateDiff("d", objFile.DateCreated, Date()) = 0 Then
					With objGFLAx
						.LoadBitmap(objFile.Path)
						
						If .Width < .Height Then
							WScript.StdOut.WriteLine vbTab & "+" & vbTab & objFile.Path
							
							.Rotate -90
							
							.SaveJPEGQuality  = 95
							.SaveKeepMetadata = True
							
							strFilePath = objFile.Path
							objFile.Name = objFile.Name & ".bak"
							.SaveBitmap strFilePath
						Else
							WScript.StdOut.WriteLine vbTab & "-" & vbTab & objFile.Path
						End If
					End With
				Else
					WScript.StdOut.WriteLine vbTab & "*" & vbTab & objFile.Path
				End If
			Case Else
				' Nothing to do
		End Select
	Next
	
	For Each objSubFolder In objFolder.SubFolders
		ScanSubFolders objSubFolder
	Next
End Sub
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:02, 09-07-2018 | #4


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


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

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


Спасибо огромное! Теперь увидел!

Отправлено: 11:37, 09-07-2018 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт по сбору инфы о железе (помогите добавить нужное) ZeVSalt Скриптовые языки администрирования Windows 11 28-09-2020 10:53
PowerShell - Добавить прогресс бар в готовый скрипт c4uran Скриптовые языки администрирования Windows 11 26-10-2018 20:16
CMD/BAT - Исправить скрипт.. добавить сортировку выводимой информации Alexander_88 Скриптовые языки администрирования Windows 7 14-12-2015 16:58
VBS/WSH/JS - Добавить строку в VBS скрипт antonhacktm Скриптовые языки администрирования Windows 5 14-12-2009 18:40
Прочее - Помогите сделать скрипт <из контейнера AD добавить файл *.dll по определенному пути> chernikov72 Программирование и базы данных 3 07-04-2009 20:20




 
Переход