4 Replies Latest reply on Oct 26, 2016 12:03 PM by Johnwhite

    How to create Folder(File.parent); in other location

    Johnwhite Level 1

      Hi experts,

       

      My aim is to make a backup in other location with file.parent before save the file.
      My script failed in file.parent creating.
      Could someone help me to correct my script, please.

      here is my script.

       

       

      #targetengine backupCopy
      (function () {  
          if (app.eventListeners.itemByName ("backupCopy").isValid) app.eventListeners.itemByName ("backupCopy").remove(); 
          var mySaveCopyEventListener = app.eventListeners.add("beforeSave", doBackup);    
          mySaveCopyEventListener.name = "backupCopy";  
      }) ();  
      //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
      Date.prototype.monthName = function() 
      {   
       var myMonth = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];   
       return myMonth[this.getMonth()];   
       }
      //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
      function doBackup(event)  {  
          if (event.target.constructor.name !== 'Document') return;  
      
       var 
              cDoc = event.target,
              startTime = new Date();
              cTime = new Date;
              cName = cTime.monthName() + 
                              "-" +
                              ("0" + String(cTime.getDate()) ).slice(-2);
      //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
          doBackup.folder = "~/Desktop/BACKUP_B4Open/"+ cName;
          if (!Folder (doBackup.folder).exists) {  
              Folder (doBackup.folder).create();  
              $.sleep(400);  
          }  
      //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
          var
          backupFolder = doBackup.folder;
              startTime = new Date();
              cTime = new Date;
              cName = cTime.monthName() + 
                              "-" +
                              ("0" + String(cTime.getDate()) ).slice(-2);
          rootFolder = Folder(File.parent); 
          newBackup = doBackup.folder + "/" + rootFolder + cName;
          if (!Folder (newBackup).exists) {  
              Folder (newBackup).create();  
              $.sleep(400);  
          }  
      //|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       var 
        timePart = dateCalc (startTime),
        newPath = doBackup.folder + "/" + newBackup + "/" + event.fullName.name.replace(".indd", "_" + timePart + ".indd");
          if (!event.fullName.copy (new File (newPath) ))
              alert ("Something wrong, backup failed");  
      }    
      function timeCalc (start) 
      {
       var 
        end = new Date(),
        diff = end - start,
        m = Math.floor(diff/60000),
        s = Math.floor( (diff - (m*60000))/1000 );
      
       return ("0" + m).slice(-2) + ":" + ("0" + s).slice(-2); 
       }
      function dateCalc (start) 
      {
       var 
        d = start.getDate(),
        m = start.getMonth() + 1,
        h = start.getHours(),
        mm = start.getMinutes();
      
       return " " + ("0" + m).slice(-2) + ("0" + d).slice(-2) + "-" + ("0" + h).slice(-2) + ("0" + mm).slice(-2); 
       }
      

       

       

      Thanks
      Regard
      John

        • 1. Re: How to create Folder(File.parent); in other location
          Peter Kahrel Adobe Community Professional & MVP

          Folder(File.parent);

           

          returns ~/Documents/tmp00000001, which is definitely not a root folder. What are you after?

           

          Peter

          • 2. Re: How to create Folder(File.parent); in other location
            Johnwhite Level 1

            Sorry, Peter,

             

            I just want to know how to create file's parent folder in other location.

             

            so about the create folder part, I changed it like this:

             

             var 
                    cDoc = event.target,
                    startTime = new Date();
                    cTime = new Date;
                    cDate = cTime.monthName() + 
                                    "-" +
                                    ("0" + String(cTime.getDate()) ).slice(-2);
                    eDate =  "-" + cTime.monthName() + 
                                    "-" +
                                    ("0" + String(cTime.getDate()) ).slice(-2);
                    myDoc = app.activeDocument; 
                    myFolder=Folder(myDoc.fullName);   
                    myFileParent = decodeURI(myFolder.parent.name);   
                doBackup.folder = "~/Desktop/BACKUP_B4Save/" + cDate + "/" + myFileParent + eDate;
                if (!Folder (doBackup.folder).exists) {  
                    Folder (doBackup.folder).create();  
                    $.sleep(400);  
                } 
            

             

             

            Regard

            John

            • 3. Re: How to create Folder(File.parent); in other location
              Laubender Adobe Community Professional & MVP

              Hi John,

              I hope, this is working as expected…

               

              However, if I were you I'd change the names for some variables so if you will come back to your code a year from now, you'll be able to understand better what is going on. And I'd do variable declaration always with var . That's not the case with the variables beginning with cTime, cDate etc. because you ended the var declaration statement in the line with: startTime = new Date(); using the ; at the end.

               

              My proposed changes would go like this perhaps:

               

              var myInDesignDocFile = File(myDoc.fullName);
              var myParentFolderName = decodeURI(myInDesignDocFile.parent.name);
              

               

              Or even better:

               

              var myInDesignDocFile = myDoc.fullName;
              var myParentFolderName = decodeURI(myInDesignDocFile.parent.name);
              

               

              Because:

               

              // With an already saved document:
              app.documents[0].fullName.constructor.name
              // Returns: File
              

               

              Regards,
              Uwe

              • 4. Re: How to create Folder(File.parent); in other location
                Johnwhite Level 1

                Thank you guys,

                 

                thank you for your help.

                 

                Regard

                John