/*
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);
}
|