Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #7100
    nickb
    Member

    Hello,

    Is there a way to run a macro (.jsee) on all files in a folder? If you have, for example, 500 files and you want to run a macro for all of them…Is opening all files the only solution to accomplish this?

    Thx!

    #7102
    Yutaka Emura
    Keymaster

    nickb wrote:
    Hello,

    Is there a way to run a macro (.jsee) on all files in a folder? If you have, for example, 500 files and you want to run a macro for all of them…Is opening all files the only solution to accomplish this?

    Thx!

    You can write a macro to enumerate all files within a folder. It should be easy by using an external object “FileSystemObject”. See Files Collection for an example.

    #7106
    nickb
    Member

    Thanks Yutaka

    I’ll try to work something out.

    gr.

    #7113
    arnold
    Member

    hi nick. it sounds very interesting. can you post your working script, please? ty ! Arnold

    #7165
    arnold
    Member

    no-one with a working script to run macros on a folder? :-(

    #7166
    Yutaka Emura
    Keymaster

    This is my sample to check if and</p><h2> matches in all HTML files in a folder (searches the folder recursively). You would of course need to modify the root folder, the contents of DoSomething() function, and the file extension to search.</p><pre class="code"><br /> sRootDir = "E:help..."; // root folder<br /> editor.NewFile(); <br /> var docResult = editor.ActiveDocument; <br /> docResult.writeln( "ERRORS Root Folder: " + sRootDir );<br /> <br /> Redraw = false;<br /> var nTotalFiles = EnumerateFolder( sRootDir );<br /> Redraw = true;<br /> <br /> alert( "Finished successfully. Total of " + nTotalFiles + " files processed." );<br /> <br /> <br /> function EnumerateFolder( sFolder )<br /> {<br /> var nTotal = 0;<br /> var fso, f, fc, s;<br /> fso = new ActiveXObject("Scripting.FileSystemObject");<br /> f = fso.GetFolder(sFolder);<br /> fc = new Enumerator(f.files);<br /> for (; !fc.atEnd(); fc.moveNext())<br /> {<br /> sItem = String( fc.item() );<br /> nLen = sItem.length;<br /> if( sItem.indexOf( "_" ) == -1 && sItem.substr( nLen - 4 ) == ".htm" ){ // make sure file or folder does not begin with _ and the file extension is .htm.<br /> DoSomething( sItem );<br /> nTotal++;<br /> }<br /> }<br /> <br /> fc = new Enumerator(f.SubFolders);<br /> s = "";<br /> for (; !fc.atEnd(); fc.moveNext())<br /> {<br /> sItem = String( fc.item() );<br /> nLen = sItem.length;<br /> if( sItem.indexOf( "_" ) == -1 ){ // make sure folder name does not begin with _<br /> nTotal += EnumerateFolder( sItem );<br /> }<br /> }<br /> return nTotal;<br /> }<br /> <br /> function DoSomething( sPath )<br /> {<br /> var y = 0;<br /> editor.OpenFile( sPath, 0, eeOpenAllowNewWindow );<br /> <br /> document.selection.Find( "(?<=<title>).+?(?=</title>)", eeFindNext | eeFindAround | eeFindReplaceRegExp | eeFindReplaceQuiet );<br /> sTitle = document.selection.Text;<br /> if( sTitle.length != 0 ){<br /> y = document.selection.GetTopPointY( eePosLogical );<br /> }<br /> else {<br /> y = document.selection.GetActivePointY( eePosLogical );<br /> }<br /> document.selection.Find( "(?<=<h2>).+?(?=</h2>)", eeFindNext | eeFindAround | eeFindReplaceRegExp | eeFindReplaceQuiet );<br /> sH = document.selection.Text;<br /> document.close();<br /> <br /> if( sH.substr( 0, 3 ) == "Q. " ){<br /> sH = sH.substr( 3 );<br /> }<br /> <br /> if( sTitle.length == 0 || sH.length == 0 || sTitle.indexOf( sH ) == -1 ){<br /> docResult.Activate(); <br /> document.writeln( "" + sPath + "(" + y+1 + "):" );<br /> document.writeln( "t<title> " + sTitle );<br /> document.writeln( "t<h2> " + sH );<br /> document.writeln( "" );<br /> }<br /> }<br /> </pre><p></h2><p>

    #7167
    arnold
    Member

    hi yutaka. first i want to ty for writing the script!
    i tried this with one of the good scripts on this forum. i get a positive message, but also an error (ERRORS Root Folder: D:test) in a new file. and when i check the files, nothing happened :-? here is the script i try to use in the test


    sRootDir = "D:test"; // root folder
    editor.NewFile();
    var docResult = editor.ActiveDocument;
    docResult.writeln( "ERRORS Root Folder: " + sRootDir );

    Redraw = false;
    var nTotalFiles = EnumerateFolder( sRootDir );
    Redraw = true;

    alert( "Finished successfully. Total of " + nTotalFiles + " files processed." );


    function EnumerateFolder( sFolder )
    {
    var nTotal = 0;
    var fso, f, fc, s;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f = fso.GetFolder(sFolder);
    fc = new Enumerator(f.files);
    for (; !fc.atEnd(); fc.moveNext())
    {
    sItem = String( fc.item() );
    nLen = sItem.length;
    if( sItem.indexOf( "_" ) == -1 && sItem.substr( nLen - 4 ) == ".htm" ){ // make sure file or folder does not begin with _ and the file extension is .htm.
    DoSomething( sItem );
    nTotal++;
    }
    }

    fc = new Enumerator(f.SubFolders);
    s = "";
    for (; !fc.atEnd(); fc.moveNext())
    {
    sItem = String( fc.item() );
    nLen = sItem.length;
    if( sItem.indexOf( "_" ) == -1 ){ // make sure folder name does not begin with _
    nTotal += EnumerateFolder( sItem );
    }
    }
    return nTotal;
    }

    function DoSomething( sPath )
    {
    // helper function that we use to put the entire text of a file in a string
    // **************************************************
    function string_fromfile(sUrl){
    var ForReading = 1, ForWriting = 2, ForAppending = 8;
    var fso, fob;
    try{
    fso = new ActiveXObject("Scripting.FileSystemObject");
    fob = fso.OpenTextFile(sUrl, ForReading);
    var strRead = fob.ReadAll();
    fob.Close();
    fso = null;
    return strRead;
    }
    catch(e){
    if(000){}
    else if(e.message == 'Input past end of file'){return '';} // blank file
    else if(e.message == 'File not found'){return ''} // not found
    else if(e.message != ''){return ''} // other problem
    };
    }

    // main code
    // **************************************************
    stext = (string_fromfile(document.FullName));
    smatch = '';

    // look inside the raw text and see if we can find something inside the h1 tag
    try{
    amatch = stext.match(/<h1>([^<]+)<.h1>/);
    smatch = amatch[1];
    }catch(ex){ smatch = '';}

    // did we actually find something inside the h1 tag?
    if(smatch != ''){
    // fix what we found so that unwanted characters get changed into a dash
    smatch = smatch.split(/[W]+/).join('-');
    // extract the parent directory and combine it with what we found to form a new filename
    newname = (document.FullName.split(/x5c/).slice(0,-1).join("x5c") + "x5c" + smatch + '.htm');
    // save a copy of the document with its new name
    document.Save( newname );
    }
    }
    #7169
    Yutaka Emura
    Keymaster

    “ERRORS Root Folder: D:test” does not really mean an error.

    In your DoSomething( sPath ) function, you didn’t even use sPath parameter passed to the function.

Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.