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

Rey71 06-07-2018 09:37 2820816

Добавить фильтр в скрипт.
 
День добрый.
Имеется следующий скрипт (найден в просторах инета) - поворачивает файлы картинок в текущей папке и подпапках в альбомную ориентацию. Отлично работает.
Необходимо добавить условие чтобы обрабатывались только файлы с текущей датой создания (либо начинать с текущая дата минус 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>


Iska 06-07-2018 13:39 2820840

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.

Rey71 09-07-2018 07:12 2821100

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

Iska 09-07-2018 10:02 2821107

Цитата:

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

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

Пробуйте:
Код:

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


Rey71 09-07-2018 11:37 2821119

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


Время: 04:35.

Время: 04:35.
© OSzone.net 2001-