Drag&drop pentru programe in linie de comanda cu AutoHotkey

Alte limbaje de programare care nu se regasesc mai sus
Other language programming

Drag&drop pentru programe in linie de comanda cu AutoHotkey

Post Number:#1  Postby Deevious » 26 Apr 2013 11:59

Aveti mai jos un script in AutoHotkey (fratele mai mic si mai open source al lui AutoIt) care automatizeaza cu drag&drop un tool in linie de comanda.

Practic, pentru un set de fisiere/folderse scapate in fereastra programului, acesta va itera prin fisiere si pentru fiecare din ele va chema un program.
Pentru a-l adapta e nevoie de modificarea liniei 53, unde se definesc extensiile fisierelor care vor fi procesate, si a liniei 55, unde se defineste linia de comanda a programului ce trebuie executat. Pentru a va descurca cu felul in care se pun ghilimelele pentru cmd.exe, folositi cu incredere sectiunea Examples de aici.

Pentru teste se recomanda sa comentati linia RunWait si sa decomentati MsgBox; astfel va puteti asigura ca ati creat linia de comanda corect. Se incearca tratarea minimala a erorilor, daca programul folosit intoarce coduri de eroare diferite de 0 acestea vor fi semnalate prin debifarea liniei din lista si prin adaugarea textului [Error code: X], unde X e return code-ul dat de program.

Apasa-l:
Code: Select all
#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn  ; Enable warnings to assist with detecting common errors.
#SingleInstance force

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.

Gui, Add, ListView, x0 y0 w480 h240 -Multi -NoSort ReadOnly Checked, Dropped Files
Gui, -Resize -MaximizeBox +ToolWindow +AlwaysOnTop
Gui, Show, Center w480 h240, FDrop

Gui, 1: Default
LV_Delete()
Return

GuiClose:
  ExitApp

GuiDropFiles:
{
  LV_Delete()
  Loop, Parse, A_GuiEvent, `n
  {
    FileGetAttrib, Attributes, %A_LoopField%
    IfInString, Attributes, D
   {
      LV_Modify(LV_Add("", A_LoopField), "Vis")
      RecurseDir(A_LoopField)
   }
   Else
   {
      ExtractCueSheet(A_LoopField)
   }
  }

  Return
}

RecurseDir(DirPath)
{
  Loop, %DirPath%\*.wv, , 1
  {
   ExtractCueSheet(A_LoopFileFullPath)
  }
}

ExtractCueSheet(FilePath)
{
  AddParams := ""
  ErrorText := ""

  SplitPath, FilePath, FileName, FileDir, FileExt, FileNameNoExt
  If FileExt in WV
  {
    RunWait, %comspec% /c ""%A_ScriptDir%\wvunpack.exe" -c "%FilePath%" 1> "%FileDir%\%FileNameNoExt%.cue"", , Hide UseErrorLevel
   ;MsgBox, %comspec% /c ""%A_ScriptDir%\wvunpack.exe" -c "%FilePath%" 1> "%FileDir%\%FileNameNoExt%.cue" 2>> "%A_ScriptDir%\RunLog.log""
   
    If ErrorLevel
   {
      AddParams := "-Check"
     ErrorText := " [Error code: " . ErrorLevel . "]"
   }
    else
   {
      AddParams := "Check"
     ErrorText := ""
   }
   
   LV_Modify(LV_Add(AddParams, FilePath . ErrorText), "Vis")
  }
}



In varianta mea, programul cauta toate fisierele cu extensia wv - rip-uri de cd-uri audio in format WavPack si extrage din ele lista de melodii, cu ajutorul utilitarului wvunpack disponibil la ei pe site, in pachetul WavPack Win32.

La rulare arata cam asa:
Image

[off-topic]Pentru a provoca eroarea am facut fisierul Genesis - Genesis.cue read only, iar redirectarea output-ului a esuat.[/off-topic]

Sper sa-i fie util cuiva.
User avatar
Deevious
Friend
Friend
 
Status: Offline
Posts: 40
Joined: 05 Nov 2012 16:25

Invitations sent: 0
Referrals: 0
National Flag:
Romania
Local time: 16 Jul 2018 00:05
Has thanked: 1 time
Been thanked: 25 times

Return to Alte limbaje

Who is online

Users browsing this forum: No registered users and 1 guest

cron