Guest User

downloads parser/copier (wsh)

a guest
Oct 23rd, 2012
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. dim skiplist, slist, directorylist, dlist, shares, tmp, found, dsplit, myloc
  2. dim skip, yr, dirmatch, t, fileFrom, fileTo, copyCommand, filesys, oshellapp
  3. dim root
  4.  
  5. root = "\\QNAP\Qdownload\transmission\completed\"
  6.  
  7. Set oShellApp = WScript.CreateObject("WScript.Shell")
  8.  
  9. set filesys = CreateObject("Scripting.FileSystemObject")
  10. t = timer
  11. logmsg "process begun"
  12.  
  13. ' the various folders where tv shows are stored
  14. shares = Split("\\pvr\c\,\\pvr\d\tv\,\\pvr\e\tv\",",")
  15.  
  16. if filesys.FileExists(root & "directory.list") then
  17.     set tmp = filesys.OpenTextFile(root & "directory.list", 1, false)
  18.     dlist = tmp.ReadAll
  19.     directorylist = split(dlist, chr(13))
  20.     tmp.close
  21. else
  22.     Set tmp = filesys.CreateTextFile(root & "directory.list", True)
  23.     tmp.writeline ""
  24.     tmp.close
  25.     redim directorylist(1)
  26. end if
  27.  
  28. if filesys.FileExists(root & "skip.list") then
  29.     set tmp = filesys.OpenTextFile(root & "skip.list", 1, false)
  30.     slist = tmp.ReadAll
  31.     skiplist = split(trim("" & slist), chr(13))
  32.     tmp.close
  33. else
  34.     Set tmp = filesys.CreateTextFile(root & "skip.list", True)
  35.     tmp.writeline "run.vbs"
  36.     tmp.writeline "directory.list"
  37.     tmp.writeline "skip.list"
  38.     tmp.close
  39.     redim preserve skiplist(3)
  40.     slist = tmp.ReadAll
  41.     skiplist = split(trim("" & slist), chr(13))
  42.     tmp.close
  43. end if
  44.  
  45. set dirlist = filesys.opentextfile(root & "directory.list", 8, true)
  46. for i = 0 to ubound(shares)
  47.     set fold = filesys.getfolder(shares(i))
  48.     for each fol in fold.subfolders
  49.         found = false
  50.         for j = 0 to ubound(directorylist)
  51.             if instr(directorylist(j),":") > 0 then
  52.                 dsplit = split(directorylist(j),":")
  53.                 if cleanDir(fol.name) = lcase(dsplit(1)) then
  54.                     found = true
  55.                     exit for
  56.                 end if
  57.             end if
  58.         next
  59.         if not found then
  60.             dirlist.writeline shares(i) & fol.name & ":" & cleanDir(fol.name)
  61.             directorylist(ubound(directorylist)) = shares(i) & fol.name & ":" & cleanDir(fol.name)
  62.             redim preserve directorylist(ubound(directorylist)+1) ' horrible, works, inefficient as hell, works
  63.         end if
  64.     next
  65. next
  66. dirlist.close
  67.  
  68. logmsg "finished processing directories"
  69.  
  70. set myloc = filesys.getfolder(root)
  71. for each fil in myloc.files
  72.     skip = false
  73.     for j = 0 to ubound(skiplist)
  74.         if lcase(fil.name) = lcase(skiplist(0)) or left(fil.name, 1) = "." or trim(fil.name & "") = "" then
  75.             skip = true
  76.             exit for
  77.         end if
  78.     next
  79.     if not skip then
  80.         yr = ""
  81.         sname = ""
  82.         name = getname(fil.name, sname, yr)
  83.         if name > " " then
  84.             dirmatch = ""
  85.             for j = 0 to ubound(directorylist)
  86.                 if instr(directorylist(j),":") > 0 then
  87.                     dsplit = split(directorylist(j),":")
  88.                     ' some shows have (2011) etc after their name for tvdb matching reasons
  89.                     if dsplit(1) = trim(name & yr) or dsplit(1) = trim(name) then
  90.                         dirmatch = dsplit(0)
  91.                         exit for
  92.                     end if
  93.                 end if
  94.             next
  95.             if dirmatch > "" then
  96.                 fileFrom = quote(myloc) ' & fil.name) 'fil.name will not need to be quoted
  97.                 fileTo = quote(dirmatch)
  98.                 ' copyCommand = "%comspec% /k xcopy " & fileFrom & " " & fileTo & " /C /D /Y" ' returns "parse error"
  99.                 copyCommand = "%comspec% /k robocopy " & fileFrom & " " & fileTo & " " & fil.name & " /R:3 /W:10"' /MOV"
  100.                 logmsg copyCommand
  101.                 oShellApp.run copyCommand
  102.             else
  103.                 logmsg "no matching directory found for: " & fil.name
  104.             end if
  105.         else
  106.             logmsg "file not processed: " & name & " (" & fil.name & ")"
  107.         end if
  108.     end if
  109. next
  110.  
  111. logmsg "process complete"
  112.  
  113. wscript.echo "press return to quit"
  114. foo = WScript.StdIn.ReadLine
  115.  
  116. function quote(byval msg)
  117.     if instr(msg," ") > 0 then
  118.         quote = chr(34) & msg & chr(34)
  119.     else
  120.         quote = msg
  121.     end if
  122. end function
  123.  
  124. function getname(byval name, byref spaceName, byref yeer)
  125. Dim ret, rex, s, z, c, q
  126.     spaceName = ""
  127.     yeer = ""
  128.     q = ""
  129.  
  130.     ret = lcase(name)
  131.     set rex = new regexp
  132.     rex.global = true
  133.  
  134.     ' replace name.name.2012.s01e02 with name.name.s01e02
  135.     rex.pattern = "[.]\d{4}[.]"
  136.     set matches = rex.execute(ret)
  137.     if matches.count > 0 then
  138.         yeer = replace(matches(0).value, ".", "")
  139.     end if
  140.     ret = rex.replace(ret,".")
  141.  
  142.     ' replace .US. and .UK. with .
  143.     rex.pattern = "[.]u[sk][.]"
  144.     ret = rex.replace(ret,".")
  145.  
  146.     ' get name before season/episode
  147.     rex.pattern = "[s]\d{2}[e]\d{2}"
  148.     if rex.test(ret) then
  149.         s = left(ret, instr(ret, ".s"))
  150.         spl = split(replace(s,".", " ")," ")
  151.         for z = 0 to ubound(spl)
  152.             spaceName = spaceName & ucase(left(spl(z),1)) & mid(spl(z),2) & " "
  153.         next
  154.         spaceName = trim(spaceName)
  155.         getname = replace(s, ".","")
  156.     end if
  157.     set rex = nothing
  158. end function
  159.  
  160. function cleanDir(byval name)
  161. Dim ret, rex
  162.     ret = name
  163.     set rex = new regexp
  164.     rex.global = true
  165.     rex.pattern = "[^a-zA-Z0-9]"
  166.     ret = rex.replace(ret,"")
  167.     rex.pattern = "[(]\d{4}[)]"
  168.     ret = rex.replace(ret,"")
  169.     cleanDir = lcase(ret)
  170.     set rex = nothing
  171. end function
  172.  
  173. sub logmsg(msg)
  174.     wscript.echo PrintHrMinSec(Timer - t) & ": " & msg
  175.     wscript.echo ""
  176. end sub
  177.  
  178. Function PrintHrMinSec(elap)
  179. Dim hr, min, sec, remainder
  180.  
  181.     elap = Int(elap) 'Just use the INTeger portion of the variable
  182.     hr = elap \ 3600 '1 hour = 3600 seconds
  183.     remainder = elap - hr * 3600
  184.     min = remainder \ 60
  185.     remainder = remainder - min * 60
  186.     sec = remainder
  187.     min = right("00" & min,2)
  188.     sec = right("00" & sec,2)
  189.     If hr = 0 Then
  190.         PrintHrMinSec = min & ":" & sec
  191.     Else
  192.         PrintHrMinSec = hr & ":" & min & ":" & sec
  193.     End If
  194. End Function
  195.  
  196. set filesys = nothing
Add Comment
Please, Sign In to add comment