 |
|
Добавить фильтр в скрипт.
День добрый.
Имеется следующий скрипт (найден в просторах инета) - поворачивает файлы картинок в текущей папке и подпапках в альбомную ориентацию. Отлично работает.
Необходимо добавить условие чтобы обрабатывались только файлы с текущей датой создания (либо начинать с текущая дата минус 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>
|
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
А как в Вашем скрипте задается выбор файлов с текущей датой создания? Ткните носом в строчку, плиз ))). »
|
Хмм… А некуда тыкать. То, что было про текущую дату в тексте сообщения — совершенно запамятовал сделать после перевода на 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
|
Спасибо огромное! Теперь увидел!
|
Время: 04:35.
© OSzone.net 2001-