Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Копирование файла, а не ярлыка? 
Author Message
_Johm



PostPosted: Thu Feb 04, 2010 09:32    Post subject: Reply with quote

JScript для копирования объектов из ярлыков (фалы/папки).
Консольный варинат для отображения сути происходящего.
Идея по извлечению "объекта" ярлыка взята из скрипта
от Batya выше.
Code:

/*
Title: extractlnk.js
Author: John Gurin, Russia, Ekaterinburg
Date: 2010/01/04
Desc.: Copies files/folders from *.lnk target field

TOTAL COMMANDER BUTTON==============================
====================================================
TOTALCMD#BAR#DATA
cscript.exe %COMMANDER_PATH%\SCRIPTS\files_ops\extractlnk.js
%L "%T"
C:\WINDOWS\System32\CScript.exe
extractlnk
%COMMANDER_PATH%\SCRIPTS\files_ops\

-1
====================================================
*/
//SCRIPT CONFIG
var ONLYLNK = 1; //copies only *.lnk files
var WAITONFINISH = 1; //will keep console window when finished

//DECLARING
var fso, listfile, strname, sourcename, sourcebasename, strtarget, targetname;
var t="",parentfld, dirflag, fileext, optioninput, optionflag=0, rewriteflag=false;
var filler = "   ", msg, msgflag, lnkflag, tmpmsgsrcname;
var StdIn = WScript.StdIn;

var MSG_EXIST = " already exists. Rewrite?\n" +
            "[Y]=yes [N]=no [R]=rename [Q]=quit " +
            "[A]=all [E]=never";
var MSG_SUBDIR = "ERROR: COPYING A DIRECTORY TO ITS OWN SUBDIRECTORY";
var MSG_ITSELF = "ERROR: YOU CANNOT COPY A FILE TO ITSELF";

shell = new ActiveXObject("WScript.Shell");
fso = new ActiveXObject("Scripting.FileSystemObject");

//MAIN
if(WScript.arguments.length != 2){WScript.Quit();}

listfile = fso.OpenTextFile(WScript.Arguments(0), 1);
strtarget = RemoveLastSlash(WScript.Arguments(1));

Echo("Copying to " + strtarget + "\\");
while (!listfile.AtEndOfStream){
   strname = listfile.ReadLine();
   msg = "";
   msgflag = 0;
   lnkflag = 0;
   fileext = "";
   fileext = fso.GetExtensionName(strname).toUpperCase();
   if (ONLYLNK == 1 && fileext != "LNK"){continue;}
   t = RemoveLastSlash(fso.GetParentFolderName(strname));
   dirflag = (t == parentfld) ? 1 : 0;
   if (dirflag == 0){
      parentfld = t;
      dirflag = 1;
      Echo("\n" + t + "\\");
      }

   if (fileext == "LNK" && fso.FileExists(strname)){
      lnkflag=1;
      sourcename = shell.CreateShortcut(strname).TargetPath;
      Echo(filler + Truncate(fso.GetFileName(strname)));
      }else sourcename = strname;
   
   sourcename = RemoveLastSlash(sourcename);
   sourcebasename = fso.GetFileName(sourcename);
   (tmpmsgsrcname == sourcename) ? (tmpmsgsrcname = sourcebasename) : (tmpmsgsrcname = sourcebasename + "\\");
   targetname = strtarget + "\\" + sourcebasename;
   if(sourcename==targetname){Echo(filler + " TARGET = SOURCE");continue;}

   msg = Truncate(sourcebasename);
   
   if (fso.FolderExists(sourcename)){
      (lnkflag==1) ? (msg = filler + " DIR " + msg):(msg = filler + msg);
      msg+="\\";
      if(fso.FolderExists(targetname)){
         if(optionflag==0){
            Echo(msg + MSG_EXIST);
            msgflag = 1;
            optioninput = WaitInput(1);
            switch (optioninput.toUpperCase()){
               case "Y":
                  rewriteflag=true;
                  break;
               case "N":
                  rewriteflag=false;
                  break;
               case "A":
                  rewriteflag=true;
                  optionflag=1;
                  break;
               case "E":
                  rewriteflag=false;
                  optionflag=1;
                  break;
               case "R":
                  while(fso.FolderExists(targetname)){
                     targetname=strtarget + "\\" + WaitInput(2);
                  }
                  rewriteflag=1;
                  break;
               case "Q":
                  WScript.Quit();
            }
         }
         if(rewriteflag){
            (msgflag == 0) ? Echo(msg):false;
            try{fso.CopyFolder(sourcename, targetname, true);
               }catch(e){Echo(MSG_SUBDIR);}
            }
      }else{
         Echo(msg);
         try{fso.CopyFolder(sourcename, targetname, true);
            }catch(e){Echo(MSG_SUBDIR);}
         }
      
   }else if(fso.FileExists(sourcename)){  //file operation
         (lnkflag==1) ? (msg = filler + " FILE " + msg):(msg = filler + msg);
         if(fso.FileExists(targetname)){
            if(optionflag==0){
               Echo(msg + MSG_EXIST);
               msgflag = 1;
               optioninput = WaitInput(1);
               switch (optioninput.toUpperCase()){
                  case "Y":
                     rewriteflag=true;
                     break;
                  case "N":
                     rewriteflag=false;
                     break;
                  case "A":
                     rewriteflag=true;
                     optionflag=1;
                     break;
                  case "E":
                     rewriteflag=false;
                     optionflag=1;
                     break;
                  case "R":
                     while(fso.FileExists(targetname)){
                        targetname=strtarget + "\\" + WaitInput(2);
                     }
                     rewriteflag=1;
                     break;
                  case "Q":
                     WScript.Quit();
               }
            }
            if(rewriteflag){
               (msgflag == 0) ? Echo(msg):false;
               try{fso.CopyFile(sourcename, targetname, true);
                  }catch(e){Echo(MSG_ITSELF);}
            }
         }else{
            Echo(msg);
            try{fso.CopyFile(sourcename, targetname, true);
               }catch(e){Echo(MSG_ITSELF);}
            }
      }else{(lnkflag==1) ? Echo(filler + " TARGET MISSING " + Truncate(tmpmsgsrcname)) :
                     Echo(filler + "CANT FIND " + Truncate(tmpmsgsrcname));}
   }//while filelist
   

listfile.Close();
if(WAITONFINISH) WaitInput(0);

//FUNCTIONS
function WaitInput(mode){
   switch(mode){
      case 0:
      Echo("\nDone\nPress Enter");
      break;
      case 2:
      Echo("Enter new name:")
      break;
   }
   return(StdIn.ReadLine());
 }
function RemoveLastSlash(str){
 if (str.substring(str.length-1, str.lenght) == "\\")
   {
   str = str.slice(0,-1);
   }
   return(str);
 }
function Echo(str){
 WScript.Echo(str);
 }
function Truncate(str){
 var P = 40;
 if (str.length > P)
   {
   str = str.slice(0,P) + ".(...)." + fso.GetExtensionName(str);
   }
   return(str);
 }


Last edited by _Johm on Thu Feb 04, 2010 16:43; edited 2 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group