Как ссылаться на объект папки Photoshop в VBScript

Используя сценарии Adobe PhotoShop CS4, JavaScript обеспечивает File а также Folder классы, но я не вижу, как я могу использовать эти классы из VBScript.

В настоящее время я использую DoJavaScript функционировать так:

Set appRef = CreateObject("Photoshop.Application")
jsCode = Array(_
    "var inFolder = Folder.selectDialog('Select a folder to process');",_
    "if(inFolder != null){",_
    "  var fileList = inFolder.getFiles(/\.(jpg|jpeg|tif|)$/i);",_
    "  var outFolder = new Folder(decodeURI(inFolder) + '/Edited');",_
    "  if (outFolder.exists == false) outFolder.create();",_
    "  for(var i = 0 ;i < fileList.length; i++){",_
    "    var doc = open(fileList[i]);",_
    "    doc.flatten();",_
    "    var docName = fileList[i].name.slice(0,-4);",_
    "    var saveFile = new File(decodeURI(outFolder) + '/' + docName + '.png');",_
    "    SavePNG(saveFile);",_
    "    activeDocument.close(SaveOptions.DONOTSAVECHANGES);",_
    "  }",_
    "}",_
    "function SavePNG(saveFile){",_
    "  pngSaveOptions = new PNGSaveOptions();",_
    "  pngSaveOptions.embedColorProfile = true;",_
    "  pngSaveOptions.formatOptions = FormatOptions.STANDARDBASELINE;",_
    "  pngSaveOptions.matte = MatteType.NONE;",_
    "  pngSaveOptions.quality = 1;",_
    "  pngSaveOptions.PNG8 = false;",_
    "  pngSaveOptions.transparency = true;",_
    "  activeDocument.saveAs(saveFile, pngSaveOptions, true, Extension.LOWERCASE);",_
    "}")
appRef.DoJavaScript(Join(jsCode, vbNewLine))

Мой вопрос: могу ли я использовать Folder а также File классы прямо из моего скрипта VB? Что-то вроде:

Set psFolder = appRef.Folder
inputFolder  = psFolder.selectDialog("Select a folder to process")

Когда я попробую это, appRef.Folder возвращает эту ошибку:

Объект не поддерживает это свойство или метод

1 ответ

В VBscript вы можете получить доступ к папке с помощью FileSystemObject:

'1.a - user browse for folder
Set objShell  = CreateObject( "Shell.Application" )
Set objFolder = objShell.BrowseForFolder( 0, "Select Folder", 0, myStartFolder )
'1.b - or use a fixed one
sFolder = "C:\foo\anyFolder\"
Set fs = CreateObject("Scripting.FileSystemObject")
Set objFolder = fs.GetFolder(sFolder)

'parse the content of the folder
Set oChildren = objFolder.SubFolders
ReDim aList(oChildren.Count)
For i = 1 To oChildren.Count
    aList(i) = oChildren.Item(i).Name
Next
Другие вопросы по тегам