Копирование файла, а не ярлыка?
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Автоматизация Total Commander

#1: Копирование файла, а не ярлыка? Author: DjDf PostPosted: Tue May 03, 2005 12:59
    —
Подскажите, кто знает, решение...

Проблема: в одном месте на диске хранятся файлы. Во втором - выборочные ярлыки на эти файлы. Как переписать, положим на флэшку или еще куда именно файлы, а не ярлыки?

Спасибо!

#2:  Author: ParcanLocation: Russian PostPosted: Tue May 03, 2005 13:46
    —
DjDf
может тебе попробовать плагин FileRedirector только придется все файлы на которые созданы ярлыки послать в него, но зато потом ты получишь то, что тебе надо, а если тебе это надо часто, то это самое то.

#3:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 03, 2005 15:26
    —
DjDf
Специально для тебя написал небольшой скриптик:
Code:
'==========================================================================
' Копирование файлов (в т.ч. файлов из ярлыков) из одной панели TC в другую
'
' В параметрах вызова из TC должно быть прописано:
' %L
'====================================================================

Dim TempFile, TCS, MyShell, FSO
Set TempFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1)
Set TCS = CreateObject("TCScript.Helper")
Set MyShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

TCS.SendCommand(2030)
TrgPath = TCS.GetTextFromClip

Do While Not TempFile.AtEndOfStream
  MyFile = TempFile.ReadLine
  '----- Извлечение файла из ярлыка -----
  If FSO.GetFile(MyFile).Type = "Shortcut" Then
    MyFile = MyShell.CreateShortcut(MyFile).TargetPath
  End If
  '--------------------------------------
  If Not FSO.FileExists(TrgPath & "\" & FSO.GetFile(MyFile).Name) Then
    FSO.CopyFile MyFile, TrgPath & "\"
  End If
Loop

Сохрани в файле *.vbs, повесь файл на кнопку, в параметрах кнопки укажи %L. В скрипте для получения пути на второй панели (он будет заносится в буфер) используется TCWSHelp.
Соответственно, выделяешь файлы и ярлыки, но вместо F5 жмешь на созданную кнопку. Вместо ярлыков будут копироваться файлы. После этого нужно будет обновить (Ctrl+R) вторую файловую панель.

#4:  Author: DjDf PostPosted: Tue May 03, 2005 17:34
    —
Огромное спасибо!

Проделал все операции, но, к сожалению, скопировались только ярлыки, а не оригиналы. Может я что-то не так сделал?

#5:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 03, 2005 17:55
    —
Странно.
Может у тебя тип файла по-другому называется.
Вставь после строчки MyFile = TempFile.ReadLine строчку:
Code:
MsgBox(FSO.GetFile(MyFile).Type)

То, что отобразит диалоговое окно для ярлыка, надо буде прописать в следующем ниже условии.

#6:  Author: DjDf PostPosted: Tue May 03, 2005 18:40
    —
Сенкс!!

Просто вместо If FSO.GetFile(MyFile).Type = "Shortcut" надо было написать If FSO.GetFile(MyFile).Type = "Ярлык".
Ты первый, кто наконец-то решил мою проблему. Доселе все говорили, что это нетривиально. Wink

#7:  Author: BatyaLocation: Москва, Россия PostPosted: Tue May 03, 2005 19:02
    —
Отлично!
Кстати, все будет проще, если вместо ярлыков использовать жесткие ссылки. Попробуй пользоваться утилитой NTFS Links.

#8:  Author: CaptainFlintLocation: Москва PostPosted: Wed May 04, 2005 11:40
    —
DjDf
Есть ещё один вариант: установить архиваторный плагин CopyLinkTarget и выполнять просто распаковку всех этих ярлыков в нужное место. ИМХО, достаточно удобный вариант.

#9:  Author: DjDf PostPosted: Wed May 04, 2005 16:35
    —
Еще раз большое спасибо за советы. Мне все же больше всего понравился вариант решения Batya, но в NTFS Links насторожило то, что в результате при попытке удаления символической ссылки Проводником будет удалено всё содержимое оригинального каталога. Ну да ладно, моя проблема решена и без символических ссылок. =)

#10:  Author: BatyaLocation: Москва, Россия PostPosted: Wed May 04, 2005 17:09
    —
DjDf
Quote:
в NTFS Links насторожило то, что в результате при попытке удаления символической ссылки Проводником будет удалено всё содержимое оригинального каталога.

Меня это тоже однажды насторожило, но меня поправил, насколько я помню, именно CaptainFlint. Символическая ссылка - это ссылка на каталог. На файлы создаются жесткие ссылки. При удалении жесткой ссылки Проводником все работает корректно - другие жесткие ссылки (файлы) остаются.

Кстати, я тут подумал, что можно вышеприведенный скрипт немного упростить - тогда не понадобится TCWSHelp:
Code:
'==========================================================================
' Копирование файлов (в т.ч. файлов из ярлыков) из одной панели TC в другую
'
' В параметрах вызова из TC должно быть прописано:
' %L %T
'====================================================================

Dim TempFile, MyShell, FSO
Set TempFile = CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0), 1)
Set MyShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

TrgPath = WScript.Arguments(1)

Do While Not TempFile.AtEndOfStream
  MyFile = TempFile.ReadLine
  '----- Извлечение файла из ярлыка -----
  If FSO.GetFile(MyFile).Type = "Shortcut" Or FSO.GetFile(MyFile).Type = "Ярлык" Then
    MyFile = MyShell.CreateShortcut(MyFile).TargetPath
  End If
  '--------------------------------------
  If Not FSO.FileExists(TrgPath & FSO.GetFile(MyFile).Name) Then
    FSO.CopyFile MyFile, TrgPath
  End If
Loop

Целевой каталог можно не вычислять, а передать от TC через %T. Обрати внимание - в параметрах кнопки надо через пробел указать %L %T.

#11:  Author: _Johm PostPosted: Wed Feb 03, 2010 07:48
    —
Как я понял, последний скрипт не работает с ярылками на папки?

#12:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Feb 03, 2010 08:40
    —
Вообще, конечно, если ярлыки создаются только для временного хранения ссылок на файлы, то удобнее держать эти ссылки на временной панели. Но если ярлыки создаются по иной причине - самая банальная - доступ к ярлыкам извне ТК, то временные панели не помогут.

Попробовал я модуль CopyLinkTarget - в принципе вполне удобно. Можно выделить все ярлыки, нажать Alt+F9 - и ТК скопирует все файлы, на которые указывают ярлыки. Мне кажется, это удобнее, чем использовать скрипты. Но с ярлыками на папки он тоже не работает, но это не очень простая задача - отображать при входе в архив содержимое некоторой папки (мне приходилось такое реализовывать).

_Johm wrote:
Как я понял, последний скрипт не работает с ярылками на папки?

Судя по тому, что написано в скрипте - не работает. Если ярлыком пользуешься только из ТК, можно просто добавить ссылку на папку в Virtual Panel - тогда можно будет входить в папку по ссылке и видеть ее реальное содержимое и копировать куда нужно.

В принципе, несложно было бы написать скрипт (даже на основании указанного), который проверял бы, файлом или папкой является целевой объект ярлыка, и в зависимости от этого выполнял бы копирование файла или папки. Но это не по мне.

#13:  Author: _Johm PostPosted: Thu Feb 04, 2010 09:32
    —
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

#14:  Author: _Johm PostPosted: Thu Feb 04, 2010 12:31
    —
Куда воткнуть ECHO OFF. в код или в кнопку, чтобы в консоли
не было команд?

#15:  Author: BatyaLocation: Москва, Россия PostPosted: Fri Feb 05, 2010 02:25
    —
_Johm wrote:
Как я понял, последний скрипт не работает с ярылками на папки?

Так ведь никто и не заказывал.
Этот скрипт работает с ярлыками папок:
Code:
'===================================================
' Копирование файлов\папок (в т.ч. из ярлыков)
'
' Параметры:
' {файл-список} {целевая папка}
'
' Пример параметров при вызове из TC:
' %L "%T"
'===================================================

Dim FF, WSH, FSO, TrgPath, F, NewPath
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Set FF  = FSO.OpenTextFile(WScript.Arguments(0), 1)

TrgPath = WScript.Arguments(1)

Do While Not FF.AtEndOfStream
  F = FF.ReadLine
  If Right(F, 1) = "\" Then F = Left(F, Len(F) - 1)
  '----- Извлечение из ярлыка -----
  If LCase(FSO.GetExtensionName(F)) = "lnk" Then
    F = WSH.CreateShortcut(F).TargetPath
  End If
  '--------------------------------
  If FSO.FileExists(F) Then
    NewPath = TrgPath & FSO.GetFile(F).Name
    If Not FSO.FileExists(NewPath) Then
      FSO.CopyFile F, TrgPath
    End If
  End If
  If FSO.FolderExists(F) Then
    NewPath = TrgPath & FSO.GetFolder(F).Name
    If Not FSO.FolderExists(NewPath) Then
      FSO.CopyFolder F, TrgPath
    End If
  End If
Loop
FF.Close
Set FF  = Nothing
Set WSH = Nothing
Set FSO = Nothing
WScript.Quit 0

#16:  Author: Yura48745 PostPosted: Wed Jan 24, 2018 16:50
    —
Code:

'===================================================
' Копирование файлов\папок (в т.ч. из ярлыков)
'
' Параметры:
' {файл-список} {целевая папка}
'
' Пример параметров при вызове из TC:
' %L "%T"
'===================================================
Sub xCopy (Path, TargetPath)
   Dim lnkName, xFolder, colFiles, objFile, colFolders, objFolder, res

   if Canceled then Exit Sub

   If LCase(FSO.GetExtensionName(Path)) = "lnk" Then
      lnkName = Replace(FSO.GetFileName(Path), ".lnk", "")
      Path = WSH.CreateShortcut(Path).TargetPath

      If FSO.FileExists(Path) then lnkName = lnkName & "." & FSO.GetExtensionName(Path)
   End If

   If Right(Path, 1) = "\" Then Path = Left(Path, Len(Path) - 1)

   If FSO.FileExists(Path) Then
      if lnkName = "" then lnkName = FSO.GetFile(Path).Name

      If FSO.FileExists(TargetPath  & lnkName) and not ReplaceAll Then
         res = msgbox ("File " & FSO.GetFile(Path).Name & " already exists", vbYesNoCancel, "Replase all")

         Select Case res
         Case 6 ' Yes
            ReplaceAll = true
            FSO.CopyFile Path, TargetPath  & lnkName
         Case 2 ' Cancel
            Canceled = true
            Exit Sub
         End Select
      else
         FSO.CopyFile Path, TargetPath  & lnkName
      End If
   End If   

   If FSO.FolderExists(Path) Then
      Set xFolder = FSO.GetFolder(Path)
      Set colFiles = xFolder.Files
      Set colFolders = xFolder.subFolders

      if lnkName = "" then  lnkName = FSO.GetFolder(Path).Name & "\"
      if  Not FSO.FolderExists(TargetPath & lnkName) then FSO.CreateFolder(TargetPath & lnkName)

      For Each objFolder in colFolders
         xCopy objFolder, TargetPath &  lnkName & "\"
      Next

      For Each objFile in colFiles
          xCopy objFile, TargetPath &  lnkName & "\"
      Next

      Set colFolders  = Nothing
      Set colFiles  = Nothing
      Set xFolder = Nothing 
   End If

End Sub


Dim WSH, FSO, FF, ReplaceAll, Canceled

if WScript.Arguments.count < 2 then WScript.Quit 1

Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
Set FF  = FSO.OpenTextFile(WScript.Arguments(0), 1)
ReplaceAll = false
Canceled = false

Do While Not FF.AtEndOfStream
   xCopy FF.ReadLine, WScript.Arguments(1)
Loop

FF.Close
Set FF  = Nothing
Set WSH = Nothing
Set FSO = Nothing

WScript.Quit 0


Добавлено спустя 17 секунд:

#17:  Author: Lisabon PostPosted: Wed Jan 24, 2018 22:29
    —
Было бы хорошо, ещё добавить поддержку юникод.

#18:  Author: FlasherLocation: Москва PostPosted: Thu Jan 25, 2018 10:37
    —
Lisabon
Не проблема. Но не лучше в контексте какого-то из скриптов со счётиком? В т. ч. нужно определиться, оставлять ли имена папок прежними при наличии одноимённых.
Что касаемо рекурсии, то я бы копировал папки как есть (с .lnk), а уже после производил бы замену в получателях.

#19:  Author: Lisabon PostPosted: Thu Jan 25, 2018 12:37
    —
Flasher
Quote:
я бы копировал папки как есть (с .lnk), а уже после производил бы замену в получателях.

Можно и так.
Quote:
со счётиком

Можно ещё добавить дополнительно параметр. Если надо, со счётчиком, то добавляем параметр. Если не надо, со счётчиком, то не добавляем параметр и перезаписываются файлы.
Было бы неплохо, если возможно, добавить индикацию процесса копирования или просто показать диалог при копировании, мол, идёт копирование ожидайте. Это будет полезно, когда копируется большой файл или папка.

#20:  Author: FlasherLocation: Москва PostPosted: Thu Jan 25, 2018 13:32
    —
Lisabon
Опцию перезаписи/счётчика сделать можно. Но я писал о папках, а не файлах. Т.е. имена папок при совпадении трогать или как?
Lisabon wrote:
Было бы неплохо, если возможно, добавить индикацию процесса копирования или просто показать диалог при копировании, мол, идёт копирование ожидайте.
ОК. Можно сделать прогресс без lnk, а потом всплыв. окошко.

#21:  Author: Lisabon PostPosted: Thu Jan 25, 2018 14:11
    —
Flasher
Quote:
имена папок при совпадении трогать или как?

Если со счётчиком, то трогать имена, если без счётчика, то не трогать имена.

#22:  Author: FlasherLocation: Москва PostPosted: Thu Jan 25, 2018 14:47
    —
Lisabon
В ТС по умолчанию структура папок сохраняется, а заданное автопереименование работает только в отношении файлов. Т. е. получается, что вместо переименования одноимённых файлов будут переименованы только корневые папки. Это разве хорошо?
И если трогать имена папок, то системный прогресс (напомню скрипт) не получится. Придётся отдельный рисовать.

#23:  Author: Lisabon PostPosted: Thu Jan 25, 2018 15:40
    —
Flasher
Сделай, как посчитаешь лучше, правильнее...

#24:  Author: FlasherLocation: Москва PostPosted: Fri Jan 26, 2018 00:39
    —
Lisabon
Ошибся насчёт автопереименования файлов. Смотри, в общем:

Code:
'•••••••••••••••••••••••• VBS ••••••••••••••••••••••••
' Копирование/перемещение выбранного по заданному пути
' с последующей заменой lnk-ярлыков на целевые объекты

' Условие:    путь запуска — пустой
' Примечание: в пути достаточно правильной буквы диска
'
' Параметры: %WF "<путь назначения>" <copy/move>
' Ключ системного автопереименования объектов: /r

' Примеры:   %WF "%PMy Folder" copy /r
'            %WF D:\New\New2\New3\New4\New5 move
'•••••••••••••••••••••••••••••••• Автор: Flasher © •••

Option Explicit : Dim A, FSO, REx, Rgx, T, Ren,_
D, Dic, Col, ShA, oFolder, oList, List, Folders,_
N, Items, F, Nm, Targ, Lnk, i, FPath, FlEx, FdEx

Set A = WSH.Arguments : If A.Count = 0 Then WSH.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set REx = New RegExp : REx.Pattern = "([.+[\(){$^])"
Set Rgx = New RegExp : Rgx.IgnoreCase = True
T = Timer: If A.Named.Exists("r") Then Ren = 8
REx.Global = True : D = FSO.GetDriveName(A(1))
Set Dic = CreateObject("Scripting.Dictionary")
Set Col = CreateObject("Scripting.Dictionary")
Set ShA = CreateObject("Shell.Application")

ShA.NameSpace(D).NewFolder Mid(A(1), Len(D) + 2)
Set oFolder = ShA.NameSpace(FSO.GetAbsolutePathName(""))
List = FSO.OpenTextFile(A(0),,,-1).ReadAll
oList = Split(List, vbNewLine)
For Each N in Filter(oList, ";")
  Nm = N
  If StrComp(FSO.GetExtensionName(N), "lnk", 1) _
  = 0 Then N = oFolder.ParseName(N).GetLink.Target
  Set Items = oFolder.Items
  Items.Filter 78064, Replace(N, ";", "?")
  Rgx.Pattern = "(^|\n)" & REx.Replace(N, "\$1") & "(\r|$)"
  For Each F in Items
    If Not F.IsLink Then N = "" Else N = F.GetLink.Path
    F = FSO.GetFileName(F.Path)
    If InStr(F, ";") Then Dic.Add F, N : Exit For
  Next : List = Rgx.Replace(List, "$1")
Next

Rgx.Pattern = "\r\n$" : List = Rgx.Replace(List, "")
Folders = Left(List, InStrRev(List, "\"))
For Each N in Filter(oList, ".lnk", 1, 1)
  If InStr(N, ";") = 0 Then
  With oFolder.ParseName(N)
    If .IsLink Then _
    Col.Add N, .GetLink.Path : Rgx.Pattern = "(^|\n)" &_
    REx.Replace(FSO.GetBaseName(N),"\$1") & "\.lnk(\r|$)":_
    List = Rgx.Replace(List, "$1" & .GetLink.Target & "$2")
  End With
  End If
Next : Set Items = oFolder.Items
Rgx.Pattern = "(^|\n)" & FSO.GetFileName(A(1)) & "\\(\r|$)"
List = Rgx.Replace(List, "$1") : If List = "" Then WSH.Quit

Set Targ = ShA.NameSpace(A(1)) : Items.Filter 78064,_
Replace(Replace(List, "\", ""), vbCrLf, ";")
Execute "Targ." & A(2) & "Here Items, 4112 + Ren"

For Each D in Array(Dic, Col)
  If D.Count Then
    For Each F in D
      FPath = D(F) : FlEx = FSO.FileExists(FPath)
      FdEx = FSO.FolderExists(FPath)
      If FlEx Or FdEx Then
        If LCase(A(2)) = "move" Then _
        If FlEx Then FSO.DeleteFile F, 1 Else FSO.DeleteFolder F, 1
        Targ.CopyHere FPath, 4112 + Ren
      End If
    Next
  End If : Set D = Nothing : i = 1
Next
For Each F in Split(Folders, vbCrLf) : FFolder FSO.BuildPath(A(1), F) : Next
T = Timer - T
If T > 3 Then
  Dim Sec, Title : If T < 10 Then Sec = 2 Else If T < 30 Then Sec = 4
  Title = "Копирование": If LCase(A(2)) = "move" Then Title = "Перемещение"
  CreateObject("WScript.Shell").Popup "Выполнено!", Sec, " " & Title, 4160
End If

Sub FFolder(Folder)
  Dim oFold, File, Fold
  Set oFold = ShA.NameSpace(Folder)
  Set Items = oFold.Items : Items.Filter 78032, "*"
  For Each File in Items
    If File.IsLink And LCase(FSO.GetExtensionName(File.Path)) <> "url" Then _
    oFold.CopyHere File.GetLink.Path, 4112 + Ren : FSO.DeleteFile File.Path, 1
  Next : Items.Filter 78000, "*"
  For Each Fold in FSO.GetFolder(Folder).SubFolders
    If FSO.FolderExists(Fold) Then FFolder Fold.Path
  Next
End Sub


Last edited by Flasher on Mon Jan 29, 2018 22:16; edited 2 times in total

#25:  Author: Lisabon PostPosted: Fri Jan 26, 2018 01:51
    —
Flasher
Погонял немного... Нашёл пару багов.

Кнопка вот такая:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" copy
C:\Windows\System32\WScript.exe,2
ReadMe


-1


Total Commander 9.12 32-bit, Windows 8.1 64-bit

1. При копировании с ярлыка файла/папки, так и не с ярлыка, а просто файл или папку, размер которых превышает 200 МБ , после операции копирования вылазит сообщение с ошибкой:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   0
Символ:   1
Ошибка:   Недопустимый вызов или аргумент процедуры
Код:   800A0005
Источник:    Ошибка выполнения Microsoft VBScript

Сами файл/папка копируются в полном объёме.

2. Если ярлыки имеют имена:
Code:
1992.10 - Out Of Space (Elektra 2-66346).LNK
1992.11 - Out Of Space (XLS 35CD).LNK
2009.11 - Invaders Must Die (HOSPCDS06).LNK
2012.09.04 - 7th Mini Album - Mirage.LNK

то копирование с ярлыка, не происходит. Если произвести копирование папки с выше указанными именами, то копируются папки без проблем.

#26:  Author: FlasherLocation: Москва PostPosted: Fri Jan 26, 2018 02:17
    —
Lisabon
1. Вряд ли это с размером связано. Я тестировал с большими файлами без бага, так что-то другое. Позже буду смотреть.
2. Поправил 31 строку.

#27:  Author: Lisabon PostPosted: Fri Jan 26, 2018 11:57
    —
Flasher
Ещё есть пожелание, если возможно...
Допустим есть кнопка:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" copy /r
C:\Windows\System32\WScript.exe,2
ReadMe


-1

Есть ярлык на файл/папку. Путь источника равен получателю. При копировании с ярлыка, после копирования файла/папки, переименовывается ярлык, тобишь добавляется к имени ярлыка
Code:
— копия
. Так вот, можно ли ярлык не переименовывать ибо смысла нет никакого.

Ещё нашёл баг с использованием имени ярлыка:
Quote:
01 mka dvd-audio araw;24bit,96000hz,4608kbs.lnk

При копировании с ярлыка, выдаёт ошибку:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   33
Символ:   5
Ошибка:   Требуется объект
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

А при попытке копирования файла с именем:
Code:
01 mka dvd-audio araw;24bit,96000hz,4608kbs.mka

ничего не происходит.


Last edited by Lisabon on Tue Jan 30, 2018 12:42; edited 1 time in total

#28:  Author: FlasherLocation: Москва PostPosted: Fri Jan 26, 2018 13:46
    —
Lisabon wrote:
Так вот, можно ли ярлык не переименовывать ибо смысла нет никакого.
А зачем вообще пытаться копировать в ту же папку, если нет смысла? Тогда нужно вообще запрет на копирование при совпадении путей делать.
Lisabon wrote:
Ещё нашёл баг с использованием имени ярлыка:
Быстро же ты на эту ситуацию вышел. Тут дело в ";". Увы, но мелкомягкие выбрали разрешённый в именах делитель для масок. Что с них взять? Я могу заменять на ? и проверять, чтобы был только один такой файл в папке, а в случае нескольких отсяенные будут скопированны вне общей группы (без прогресса). Не сильно комильфо, но всё же. Question

#29:  Author: Lisabon PostPosted: Fri Jan 26, 2018 16:15
    —
Flasher
Quote:
А зачем вообще пытаться копировать в ту же папку, если нет смысла?

Не очень понял... В общем, есть ярлык, он в по одному пути, файл на который ссылается ярлык, не находятся рядом.
Я выбираю ярлык, с которого надо скопировать файл. В левой и правой файловой панелях, пути одинаковы и там находится только ярлык:


После обработки, получаем вот такой результат:


Зачем копировать в папку, где находится сам ярлык? Ну, например, для получения копии файла, где находится ярлык.

Quote:
Тогда нужно вообще запрет на копирование при совпадении путей делать.

Если используется кнопка
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" copy /r
C:\Windows\System32\WScript.exe,2
ReadMe


-1

, то зачем делать запрет.

#30:  Author: FlasherLocation: Москва PostPosted: Fri Jan 26, 2018 16:50
    —
Lisabon wrote:
После обработки, получаем вот такой результат:
А. Т. е. замена не происходит. Так бы и писал. Ладно, поправимо, хотя и через ...
Lisabon wrote:
Ну, например, для получения копии файла, где находится ярлык.
А смысл в копиях в том же каталоге какой? Это же не бэкапер или размножитель. Цель такая не ставилась, вроде.
Lisabon wrote:
, то зачем делать запрет.
Так суть автопереименования не в создании дублей, а в предотвращении перезаписи и необходимости содержать потенциально разные по содержимому файлы.

#31:  Author: Lisabon PostPosted: Fri Jan 26, 2018 17:19
    —
Flasher
Quote:
суть автопереименования не в создании дублей, а в предотвращении перезаписи и необходимости содержать потенциально разные по содержимому файлы

А если содержимое одинаково, то получается дубляж.

Quote:
А смысл в копиях в том же каталоге какой?

В папке ярлыка, а не папке исходного файла. Ярлык в одном месте, исходный файл в другом месте, а обрабатываемая рабочая копия возле ярлыка. Я просто привёл пример. Потребность такая, тоже возможна.
Quote:
Это же не бэкапер или размножитель.

Но скрипт, выполняет и такую функцию тоже. Ведь копирование по ярлыку, уже подразумевает дубляж файла, но уже в том месте, где находится ярлык.

#32:  Author: FlasherLocation: Москва PostPosted: Fri Jan 26, 2018 17:25
    —
Lisabon
Копирование по ярлыку никак не подразумевает дубляж. Это лишь побочное событие, о причинах которого я написал выше. Потребность-то возможна, но в контексте сабжа несколько сомнительна. Поэтому задача по размножению тут не ставится.

#33:  Author: FlasherLocation: Москва PostPosted: Mon Jan 29, 2018 22:17
    —
Lisabon
Значит, вернёмся к ситуации. Посмотри, как там после правок.

#34:  Author: Lisabon PostPosted: Tue Jan 30, 2018 13:08
    —
Flasher
При кнопке:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" copy /r
C:\Windows\System32\WScript.exe,2
ReadMe


-1


1.
Quote:
При копировании с ярлыка файла/папки, так и не с ярлыка, а просто файл или папку, размер которых превышает 200 МБ , после операции копирования вылазит сообщение с ошибкой

Теперь ошибки не наблюдаю, но в конце операции, выскакивает окно с надписью "Выполнено!".

2.
Quote:
с использованием имени ярлыка:
Цитата:
01 mka dvd-audio araw;24bit,96000hz,4608kbs.lnk

При копировании с ярлыка, выдаёт ошибку:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   33
Символ:   5
Ошибка:   Требуется объект
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

Ошибки нет.

3.
Quote:
при попытке копирования файла с именем:
Code:
01 mka dvd-audio araw;24bit,96000hz,4608kbs.mka

ничего не происходит.

Ничего не изменилось. Не копирует.

4.
Quote:
В общем, есть ярлык, он в по одному пути, файл на который ссылается ярлык, не находятся рядом.
Я выбираю ярлык, с которого надо скопировать файл. В левой и правой файловой панелях, пути одинаковы и там находится только ярлык:

Теперь результат немного другой и имеем два ярлыка вместо одного:


5.
При копировании с ярлыка, копируется с файлом и сам ярлык:

#35:  Author: FlasherLocation: Москва PostPosted: Tue Jan 30, 2018 16:16
    —
Lisabon
5. Вот это вообще подстава.. Если её в расчёте на прогресс-бар обходить, то на чтение будет уходить куда больше времени... Делать?

#36:  Author: AvadaLocation: Россия, Саратов PostPosted: Tue Jan 30, 2018 16:30
    —
Тема по очевидным причинам переносится из "Общих вопросов" в Автоматизацию.

#37:  Author: Lisabon PostPosted: Wed Jan 31, 2018 11:31
    —
Flasher
Quote:
на чтение будет уходить куда больше времени...

На сколько больше?

Quote:
Делать?

Делай.

#38:  Author: FlasherLocation: Москва PostPosted: Thu Feb 01, 2018 15:19
    —
Lisabon wrote:
На сколько больше?
Зависит от длины списка и числа найденных lnk-копий.

Lisabon wrote:
Делай.
Ну, смотри..

 Проверяй:


Last edited by Flasher on Tue Feb 06, 2018 00:40; edited 5 times in total

#39:  Author: Lisabon PostPosted: Thu Feb 01, 2018 17:58
    —
Flasher
Quote:
Проверяй:

При копировании с ярлыка появляется ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   39
Символ:   1
Ошибка:   Требуется объект
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#40:  Author: FlasherLocation: Москва PostPosted: Thu Feb 01, 2018 18:05
    —
Lisabon
Shocked Бред какой-то. Это вообще никак не может быть связано с тем, ярлык это или что-то иное. Откуда там взяться ошибке, неясно. Проверь выполнение условия и параметры.

#41:  Author: Lisabon PostPosted: Thu Feb 01, 2018 20:13
    —
Flasher
Проверил, всё нормально с параметрами. Потом попробовал параметры, которые указаны в самом скрипте, как пример.
Пробовал на разных дисках, на разных файловых системах. Перемещал скрипт в разные папки и диски. Проверял доступ и владельца. Еще пробовал запускать скрипт на Win 7 64-bit, но проблема та же.

Еще интересное, в том, что, если ярлык находится в корне диска, то выдаёт ошибку:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   39
Символ:   1
Ошибка:   Требуется объект
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript


а если ярлык находится в папке какой-нибудь, то выдаёт ошибку:

Code:
Сценарий:   C:\ReadMe.vbs
Строка:   118
Символ:   3
Ошибка:   Требуется объект: 'Item'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#42:  Author: FlasherLocation: Москва PostPosted: Thu Feb 01, 2018 20:40
    —
Lisabon wrote:
если ярлык находится в корне диска
А. Вот касаемо расположения (опять же, конкретно ярлыков это не касается) подтверждаю. Исправил.
Lisabon wrote:
а если ярлык находится в папке какой-нибудь
Источник и получатель в точности какие? Хотя бы пару примеров. На Win x32 есть проблема?

#43:  Author: Lisabon PostPosted: Thu Feb 01, 2018 22:21
    —
Flasher
Ошибки:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   39
Символ:   1
Ошибка:   Требуется объект
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

уже нет, но теперь вместо нее, выдаёт ошибку:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   118
Символ:   3
Ошибка:   Требуется объект: 'Item'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

причём без разницы, где находится ярлык, хоть в корне диска, хоть в другой папке.
Quote:
Источник и получатель в точности какие?

Без разницы, хоть одинаковый или разный.
Quote:
Хотя бы пару примеров


Quote:
На Win x32 есть проблема?

На Win 8.0 32-bit ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   118
Символ:   3
Ошибка:   Требуется объект: 'Item'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

есть.
На Win XP SP3 32-bit - ошибки нет.

#44:  Author: FlasherLocation: Москва PostPosted: Thu Feb 01, 2018 22:41
    —
Lisabon
Ну, ладно так пруфами (да ещё в виде шотов) закидывать. Верю. Жаль, что такие косяки есть в некоторых версиях.
Пришлось в каждом месте условие прописать. Тестируй.

#45:  Author: Lisabon PostPosted: Thu Feb 01, 2018 23:50
    —
Flasher
Quote:
Тестируй.

Теперь, такая ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   62
Символ:   7
Ошибка:   Требуется объект: 'Item(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#46:  Author: FlasherLocation: Москва PostPosted: Thu Feb 01, 2018 23:56
    —
Lisabon
Да что ж такое там мелкомягкие понакоцали...

 Что покажет скрипт на файле/папке/ярлыке?


Last edited by Flasher on Fri Feb 02, 2018 13:23; edited 5 times in total

#47:  Author: Lisabon PostPosted: Fri Feb 02, 2018 12:01
    —
Flasher
Quote:
Что покажет на ярлыке?

Code:
Сценарий:   C:\Link.vbs
Строка:   4
Символ:   1
Ошибка:   Объект не поддерживает это свойство или метод: 'CreateObject(...).Items'
Код:   800A01B6
Источник:    Ошибка выполнения Microsoft VBScript

#48:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 12:45
    —
Lisabon
Поспешил. Ещё раз.

#49:  Author: Lisabon PostPosted: Fri Feb 02, 2018 12:56
    —
Flasher
Quote:
Ещё раз

Первый диалог: 1
Второй диалог: Истина

#50:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 13:07
    —
Lisabon
Хм. А теперь? Пробуй также, когда в той же папке есть/нет целевого объекта у ярлыка.

#51:  Author: Lisabon PostPosted: Fri Feb 02, 2018 13:18
    —
Flasher
В первом диалоге: 0
Потом ошибка:
Code:
Сценарий:   C:\Link.vbs
Строка:   8
Символ:   1
Ошибка:   Требуется объект: 'Items.Item(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#52:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 13:23
    —
Lisabon
А теперь?

Lisabon wrote:
В первом диалоге: 0
Курсор ставил на файл/линк/папку? Данные шапки соблюдены?

#53:  Author: Lisabon PostPosted: Fri Feb 02, 2018 14:23
    —
Flasher
Quote:
Курсор ставил на файл/линк/папку?

На ярлык.
Quote:
Данные шапки соблюдены?

Quote:
' Условие: Путь запуска пустой
' Параметр: %N

Да.
Quote:
А теперь?

Lisabon wrote:

В первом диалоге: 0
Потом ошибка:
Code:
Сценарий:   C:\Link.vbs
Строка:   8
Символ:   1
Ошибка:   Требуется объект: 'Items.Item(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#54:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 14:59
    —
Lisabon wrote:
На ярлык.
С ярлыком причина понятна. Но я имел в виду все варианты, а не один из. А также это.

В скрипте копирования, где проявляется ошибка, что покажет, если между 61 и 62 строкой вставить?:
Code:
MsgBox Items.Count

#55:  Author: Lisabon PostPosted: Fri Feb 02, 2018 15:52
    —
Flasher
Quote:
все варианты, а не один из

На файл и папку:
Диалог №1: 1
Диалог №2: Ложь
Диалог №3: Ложь
Quote:
А также это

На файл и папку, то что указал выше. На ярлык, то что указывал тут
Quote:
В скрипте копирования, где проявляется ошибка, что покажет, если между 61 и 62 строкой вставить?:
Code:
MsgBox Items.Count

На ярлыке и на папке:
Диалог №1: 0
Потом ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   63
Символ:   7
Ошибка:   Требуется объект: 'Item(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

На файле:
Диалог: 1


Last edited by Lisabon on Fri Feb 02, 2018 15:56; edited 1 time in total

#56:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 15:55
    —
Lisabon
Теперь ситуация проясняется. Этот ярлык какой целевой объект имеет?

#57:  Author: Lisabon PostPosted: Fri Feb 02, 2018 16:00
    —
Flasher
Code:
С:\Scrat's Continental Crack Up_h1080p Part 2.lnk

на
Code:
"E:\Video\Torrents\Other\Scrat's Continental Crack Up_h1080p Part 2.mkv"

#58:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 16:13
    —
Lisabon
Тогда не понимаю..

 Этот что покажет?:

#59:  Author: Lisabon PostPosted: Fri Feb 02, 2018 16:28
    —
Flasher
Quote:
Этот что покажет?

Диалог №1: Истина
Диалог №2: 1
Диалог №3: Истина
Quote:
Тогда не понимаю

Может забить на этот скрипт? Мне как-то не удобно, перед тобой. Тратишь своё время на поиски причины.

#60:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 16:42
    —
Lisabon
Ещё больше путаницы. То не работает, то работает...
Замени Items.Item(0) на oFolder.ParseName(N) в 62 строке. Будет ошибка?

Ну, так, может, кому-то тоже скрипт понадобится.

#61:  Author: Lisabon PostPosted: Fri Feb 02, 2018 17:09
    —
Flasher
Quote:
Замени Items.Item(0) на oFolder.ParseName(N) в 62 строке.

На ярлыке и папке ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   62
Символ:   7
Ошибка:   Требуется объект: 'ParseName(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

На файле - ошибки нет.

#62:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 17:56
    —
Lisabon
Т. е. 'N' в скобках замени на 'D', а ' : D = N' допиши в конец 41 строки.

Меня пока в этой истории удивляет это:
Lisabon wrote:
На ярлыке и на папке:
Диалог №1: 0
При том что:
Lisabon wrote:
Диалог №2: 1
Как-то не стыкуется...

#63:  Author: Lisabon PostPosted: Fri Feb 02, 2018 19:11
    —
Quote:
Т. е. 'N' в скобках замени на 'D'

Это в 62 строке? oFolder.ParseName(N) заменить на oFolder.ParseName(D)
Если да, то ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   62
Символ:   7
Ошибка:   Требуется объект: 'Item(...)'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

#64:  Author: FlasherLocation: Москва PostPosted: Fri Feb 02, 2018 19:32
    —
Lisabon
В общем, это всё неважно. Важно понять, почему он не находит объект (хотя здесь находит). Если бы находил, то и ошибок этих не было.
Можно в TV-r/Ammyy глянуть, как тогда.

#65:  Author: Lisabon PostPosted: Sat Feb 03, 2018 12:14
    —
Flasher
Quote:
Можно в TV-r/Ammyy глянуть, как тогда

Можно. Пиши в личку, когда произвести подключение.

#66:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 18:18
    —
Lisabon
Вроде всё откорректировал. Опробуй.

Add: А, не всё. Теперь всё.

#67:  Author: Lisabon PostPosted: Sat Feb 03, 2018 19:39
    —
При кнопке:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" copy /r
C:\Windows\System32\WScript.exe,2
ReadMe


-1

1. При копировании с папки и если имена папок совпадают

, то выскакивает ошибка:
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   127
Символ:   3
Ошибка:   Требуется объект: 'oFold'
Код:   800A01A8
Источник:    Ошибка выполнения Microsoft VBScript

но копия создаётся.

2.Если у ярлыка и у файла совпадают имена и пути, например:

, то при копировании с ярлыка, удаляется ярлык. Это касается и папок тоже.

При такой кнопке:
Code:
TOTALCMD#BAR#DATA
C:\ReadMe.vbs
%WF "%T" move /r
C:\Windows\System32\WScript.exe,2
ReadMe


-1

Если у ярлыка и у файла совпадают имена и пути, например:

то ошибка при перемещении с ярлыка.
Code:
Сценарий:   C:\ReadMe.vbs
Строка:   97
Символ:   30
Ошибка:   Путь не найден
Код:   800A004C
Источник:    Ошибка выполнения Microsoft VBScript

но файл перемещается. Это касается и папок тоже.

Если пути ярлыка в левой и правой файловой панели одинаковы:

то перемещение с ярлыка не происходит.

#68:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 20:08
    —
Lisabon
1. Не воспроизводится.
2. Так предусмотрено. Мне видится, нет смысла держать ярлык там же, где есть объект.
3. Ошибки не вижу.
4. Это вижу. Исправлю, как с остальным разберёмся.

#69:  Author: Lisabon PostPosted: Sat Feb 03, 2018 20:32
    —
Flasher
Quote:
2. Так предусмотрено. Мне видится, нет смысла держать ярлык там же, где есть объект.

У ярлыка путь к объекту иной. В моём случае:
Code:
"E:\Video\Torrents\Other\Scrat's Continental Crack Up_h1080p Part 2.mkv"

и это копирование, а как ты писал, что при копировании ярлык не должен удалятся.

#70:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 20:36
    —
Lisabon wrote:
У ярлыка путь к объекту иной.
Как же? А пишешь:
Lisabon wrote:
Если у ярлыка и у файла совпадают имена и пути

#71:  Author: Lisabon PostPosted: Sat Feb 03, 2018 20:37
    —
Flasher
Я тогда не уточнил, что у ярлыка путь к объекту иной.

#72:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 20:40
    —
Lisabon
Не столько не уточнил, сколько написал противоположное.
А ты точно последнюю версию используешь?

#73:  Author: Lisabon PostPosted: Sat Feb 03, 2018 20:53
    —
Quote:
сколько написал противоположное.

Имелось ввиду, что ярлык и файл находятся в одном месте и имена у них одинаковые:
Code:

C:\Scrat's Continental Crack Up_h1080p Part 2.lnk
C:\Scrat's Continental Crack Up_h1080p Part 2.mkv

и забыл добавить, что у ярлыка путь к объекту иной.

Quote:
А ты точно последнюю версию используешь?

Брал от сюда
Quote:
Последний раз редактировалось: Flasher (Сб Фев 03, 2018 16:47), всего редактировалось 4 раз(а)

#74:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 20:57
    —
Lisabon
А. Ты имеешь в виду при выделении и ярлыка и файла? Тогда это сделано для того, чтобы не было лишнего дубликата. Ведь цель — не создание нескольких копий, достаточно одной. Это в большей степени сделано для прогресса, чтобы не зацепить ярлык для копирования.

#75:  Author: Lisabon PostPosted: Sat Feb 03, 2018 21:03
    —
Flasher
Quote:
Ты имеешь в виду при выделении и ярлыка и файла?

Имею ввиду при копировании с ярлыка:
Code:
C:\Scrat's Continental Crack Up_h1080p Part 2.lnk

#76:  Author: FlasherLocation: Москва PostPosted: Sat Feb 03, 2018 21:23
    —
Lisabon
Это из той же оперы. Вроде файл есть. Зачем рядом ярлык с тем же файлом, пусть и из другой папки?

По поводу п. 1. Копия с каким именем создаётся?

#77:  Author: Lisabon PostPosted: Sun Feb 04, 2018 11:59
    —
Flasher
Quote:
Зачем рядом ярлык с тем же файлом, пусть и из другой папки?

Просто так захотелось )

Quote:
По поводу п. 1. Копия с каким именем создаётся?

Допустим оригинал:
Code:
C:\Test\

получаемая копия:
Code:
C:\Test — копия\

#78:  Author: FlasherLocation: Москва PostPosted: Sun Feb 04, 2018 13:38
    —
Lisabon wrote:
получаемая копия
Всё верно. А попробуй в 45 строке FSO.GetBaseName(N) на Replace(N, "\", "") заменить.

#79:  Author: Lisabon PostPosted: Mon Feb 05, 2018 12:10
    —
Flasher
Quote:
в 45 строке FSO.GetBaseName(N) на Replace(N, "\", "") заменить

Ничего не изменилось, ошибка присутствует.

#80:  Author: FlasherLocation: Москва PostPosted: Mon Feb 05, 2018 12:39
    —
Lisabon
Между 125 и 126 строкой MsgBox Folder вставь.
И пока висит окно, проверь существующий путь. Потом убери окно и проверь результат.

#81:  Author: Lisabon PostPosted: Mon Feb 05, 2018 15:54
    —
Flasher
Quote:
пока висит окно

В окне пишет:
Code:
C:\Test - копия

на диске создаётся копия:
Code:
C:\Test — копия

Визуально бросается в глаза, что в окне дефис, в созданной папке тире.

#82:  Author: FlasherLocation: Москва PostPosted: Tue Feb 06, 2018 00:43
    —
Lisabon
П. 1 и 4 вроде исправил.
П. 3 так и не воспроизвёл.

#83:  Author: Lisabon PostPosted: Tue Feb 06, 2018 12:26
    —
Flasher
П. 1 - исправлено
П. 4 - не исправлено

#84:  Author: FlasherLocation: Москва PostPosted: Tue Feb 06, 2018 13:49
    —
Lisabon
4. Вообще да. Я там больше правил проблему с разными папками. Но почему так сделал, понять несложно. Если мы что-то перемещаем в другую папку, то только по имени нельзя понять, что файлы одинаковы, и есть смысл сделать копию, а когда мы пытаемся перенести в ту же, то уже известно, что там есть этот файл и перемещение не требуется. Поэтому у меня в начале стоит заглушка. Если ты с этим не согласен, то прошу обосновать.

#85:  Author: Lisabon PostPosted: Tue Feb 06, 2018 16:21
    —
Flasher
Мне не понятна логика параметра move при перемещении с ярлыка.
Есть ярлык:
Code:
C:\Scrat's Continental Crack Up_h1080p Part 2.lnk

Ярлык ссылается на объект:
Code:
"E:\Video\Torrents\Other\Scrat's Continental Crack Up_h1080p Part 2.mkv"

По идее, при перемещении с ярлыка, файл:
Code:
"E:\Video\Torrents\Other\Scrat's Continental Crack Up_h1080p Part 2.mkv"

на который ссылается ялык, должен быть перемещён, и после необходимо удалять ярлык.
А сейчас получается, что при перемещении с ярлыка, файл копируется с ярлыка в другое место и потом удаляется ярлык, а файл:
Code:
"E:\Video\Torrents\Other\Scrat's Continental Crack Up_h1080p Part 2.mkv"

остаётся на своём месте. Получается, что это не перемещение, копирование с удалением ярлыка.

#86:  Author: FlasherLocation: Москва PostPosted: Tue Feb 06, 2018 17:13
    —
Lisabon wrote:
это не перемещение, копирование с удалением ярлыка.
По-моему, это логично. Ты же ярлык выделяешь, а не файл, который надо переместить.

#87:  Author: Lisabon PostPosted: Tue Feb 06, 2018 17:29
    —
Flasher
Ярлык является посредником, а не объектом. Из ярлыка берётся путь к обрабатываемому объекту, чтобы после обработать объект.

#88:  Author: FlasherLocation: Москва PostPosted: Tue Feb 06, 2018 18:02
    —
Lisabon
Ярлык является ещё и образом, как в случае перемещения симлинка. У жёстких ссылок так вообще нет ни объекта ни посредника.
К тому же велика вероятность незапланированного перемещения объекта, который не стоило трогать. rundll32.exe в частности.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group