Mklink pro Altap Salamander

Občas potřebuji v Altap Salamanderu vytvořit link.  Jelikož jsem v něm ale tuto možnost nenašel, hurá do command line, naštvat se, kterej že … to psal nápovědu ke commandu mklink a vytvořit si napodruhé odkaz (pořadí parametrů v nápovědě a ve skutečnosti je prohozeno).

Nicméně dnes jsem asi moc roztopil kotel a přehřál se mi mozek, načež jsem se rozhodl, že to takhle nejde a nemám přece tolik času, abych si mohl každé dva měsíce dovolit ztratit drahocenou půlminutu takovou otrockou dřinou, a rozhodl jsem se si vytvoření linku  zaintegrovat do Saláma.

Výsledkem bezmála půldenní činnosti a (velice nepřátelského) seznamování se s VBScript syntaxí je vytvoření asi stořádkového skriptu mymklink – zdroják viz. níže. Takže zbytečně promarněný půlden, ale třeba to někomu udělá radost.

Pokud si soubor „mymklink.wsf“ nakopírujete do „C:\Windows\System32“ (Win7 32bit) nebo jinam, kam máte nastavenu cestu pro vyhledávání commandů ve windoze,  pak integrace do Saláma vypadá asi takto:

_todo - Altap Salamander 2.54 EDU_2014-10-30_23-26-18

a takto pro hardlink.
_todo - Altap Salamander 2.54 EDU_2014-10-30_23-27-46

Pokud si soubor zkopírujete jinam, bude asi třeba zadat příslušný „Spouštěcí adresář“.

V Salámu to pak funguje asi takto: – pomocí F9 si vlezte do „Uživatelské nabídky“, a po vybrání položky vytvoří skript v adresáři otevřeném v neaktivním panelu odkaz na soubor(y)/adresář(e) vybraný(é) v aktivním panelu.
Před a po::

test - Altap Salamander 2.54 EDU_2014-10-30_23-45-56

Jméno nového linku je automaticky nastaveno stené jako jméno původního souboru. Pokud byste preferovali možnost být pokaždé na jméno nového linku dotázáni, vynechte v definici na řádce „Argumenty“ parametr /a

A nyní již zdrojový kód tohoto veledíla:

<job>
<script language="VBScript">

  helpTxt = vbNewLine & vbNewLine & "Usage: mymklink [/H] [/A] [/V] linkDir target " & vbNewLine & " linkDir: directory where new link will be created " & vbNewLine & " target: path to the file/folder linked " & vbNewLine & " /H: hardlink is created instead of symlink " & vbNewLine & " /A: Auto - new link name will be automatically created from target - without it user is asked for new link name" & vbNewLine & " /V: Verbose - prints out mklink output even on success, by default only on errors "
  If WScript.Arguments.Count < 2 Then  
    MsgBox helpTxt
    Wscript.Quit
  End If

  Set fso = CreateObject("Scripting.FileSystemObject")

  '// read required command line parameters 
  linkDir = Trim(WScript.Arguments.Item(WScript.Arguments.Count-2))
  target = Trim(WScript.Arguments.Item(WScript.Arguments.Count-1))

  '// remove trailing backslash in linkDir & target if necessary
  If(Right(linkDir,1) = "\") Then
    linkDir = Left(linkDir,Len(linkDir)-1)
  End If
  If(Right(target,1) = "\") Then
    linkDir = Left(target,Len(target)-1)
  End If

  '// check first param 
  If NOT fso.FolderExists(linkDir) Then 
    MsgBox "Error: linkDir """ & linkDir & """ must be existing folder" & helpTxt
    Wscript.Quit
  End If

  '// check second param and find out if it is Folder or File 
  If fso.FolderExists(target) Then
    isTargetFolder = 1
  Elseif fso.FileExists(target) Then  
    isTargetFile = 1
  Else
    MsgBox "Error: target """ & target & """ must be existing folder/file" & helpTxt
    Wscript.Quit
  End If

  '// read optional command line parameters
  'target = Trim(WScript.Arguments.Item(WScript.Arguments.Count-1))
  extraOptions = ""
  For i = 0 to WScript.Arguments.Count-3
    extraOptions = extraOptions & Trim(WScript.Arguments.Item(i))
  Next
  extraOptions = UCase(extraOptions)
  extraOptionHard = InStr(extraOptions,"H")
  extraOptionAuto = InStr(extraOptions,"A")
  extraOptionVerbose = InStr(extraOptions,"V")
  'MsgBox "Options: H:"&extraOptionHard&" A:"&extraOptionAuto&" V:"&extraOptionVerbose '// DEBUG

  '// choose proper mklink command modifier depending on target type and hard/sym parameter 
  If extraOptionHard Then 
    If isTargetFolder Then
      modif = "/J "
    Else
      modif = "/H "
    End If
  Else
    If isTargetFolder Then
      modif = "/D "
    Else
      modif = ""
    End If
  End If

  '// default link name created from target file name 
  linkName = fso.GetFileName(target)

  '// ask user for name of new link to be created
  '// if file/folder of specified name already exists user is informed and asked to give another name  
  '// if auto parameter is specified user is not asked in first loop
  tmpErrMsg = ""
  Do   
    If extraOptionAuto = 0 Then
      linkName = InputBox(tmpErrMsg & vbNewLine & "Enter the name for new link or press Cancel to end.", "Create Link", linkName)
      If linkName = "" Then
        Wscript.Quit
      End If
    End If

    link = linkDir & "\" & linkName

    If fso.FileExists(link) OR fso.FolderExists(link) Then
      tmpErrMsg = "Error: File or folder """ & link & """ already exists, choose another."
      link = ""
      extraOptionAuto = 0 '// We have to reset otherwise we will end-up with endless 
    End If
  Loop While link = ""

  '// create mklink command 
  'MsgBox "Parameters " & vbNewLine & "link: " & link & vbNewLine & "target: " & target '//DEBUG  
  cmdMkLink = "mklink " & modif & """" & link & """ """ & target & """ " 
  'MsgBox cmdMkLink '//DEBUG
  'Wscript.Quit '//DEBUG

  '// exec command and get mklink output 
  Set oShell = WScript.CreateObject("WSCript.shell")
  Set oExec = oShell.Exec("cmd /K " & cmdMkLink & " & exit" )
  Do While oExec.Status = 0
     WScript.Sleep 100
  Loop
  res = oExec.StdOut.ReadAll
  errors = oExec.StdErr.ReadAll

  '// (if VERBOSE option is specified output is always printed, otherwise only on error)
  If oExec.ExitCode <> 0 Then 
    MsgBox "Errors:" & vbNewLine & errors
  Else
    If extraOptionVerbose Then
      MsgBox res
    End If
  End If

</script>
</job>

Zveřejnit odpověď

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*