

TIP: You can quickly switch to a previously used format expression by hitting DOWN (or right-click) when you're in the editor.
Code: Select all
{n} - {s00e00} - {t}
Code: Select all
X:/TV Shows/{n}/Season {s.pad(2)}/{n} - {s00e00} - {t}{'.'+lang}
Code: Select all
{n.replaceTrailingBrackets()} - {s00e00} - {t.replaceAll(/[!?.]+$/).replaceAll(/[`´‘’ʻ]/, "'").lowerTrail().replacePart(', Part $1')}
Code: Select all
{n.space('_')}_-_{sxe}_[{resolution}_{vc}_{ac}][{crc32}]
Code: Select all
{n} [{airdate.format("yyyy.MM.dd, EEEE", Locale.getDefault())}] {t}
Code: Select all
{n.space('.')}.S{(episode.season ? s : 1).pad(2)}E{e.pad(2)}.{t.space('.')}
Code: Select all
X:/TV Shows/{n}/{episode.special ? 'Special' : 'Season '+s}/{n} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t}
Code: Select all
{n} ({y}){' CD'+pi}{'.'+lang}
Code: Select all
X:/Movies/{n} ({y})/{n} ({y}){' CD'+pi}
Code: Select all
{n} ({y}){' CD'+pi}{if (ext == 'nfo' && folder.list().find{it =~ /(?i:CD\d+)/}) '.CD1'}
Code: Select all
X:/Movies/{n} ({y})/{fn}
Code: Select all
{file.path[0]}:/Movies/{n} ({y})/{n} ({y}){' CD'+pi}
Code: Select all
{n} ({y}) {genres} - {actors.take(3).join(', ')}
Code: Select all
X:/Movies/{collection+'/'}{n} ({y}){'['+source+']'}/{n} ({y}) [{fn.match(/3D/)+', '}{vf}, {ac}, {af}]
Code: Select all
{fn =~ /3D/ ? '3D Movies' : 'Movies'}/{n} ({y}){fn =~ /3D/ ? ' [3D] [H-SBS]' : ''}/{n} ({y}) ({vf}){fn =~ /3D/ ? ' H-SBS' : ''}{' CD'+pi}
Code: Select all
{['C:', 'D:', 'E:'].collect{ (it+'/TV/'+n) as File }.sort{ a, b -> a.exists() <=> b.exists() ?: a.diskSpace <=> b.diskSpace }.last()}/{episode}
Code: Select all
{n =~ /^(?i)[0-9a-f]/ ? 'X' : n =~ /^(?i)[g-t]/ ? 'Y' : 'Z'}:/TV/{n}/{episode}
Code: Select all
TV Shows/{n}/{episode.special ? 'Special' : 'Season '+s.pad(2)}/{n} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t.replaceAll(/[`´‘’ʻ]/, /'/).replaceAll(/[!?.]+$/).replacePart(', Part $1')}{'.'+lang}
Code: Select all
Anime/{primaryTitle}/{primaryTitle} - {sxe} - {t.replaceAll(/[!?.]+$/).replaceAll(/[`´‘’ʻ]/, /'/).replacePart(', Part $1')}
Code: Select all
Movies/{n} ({y})/{n} ({y}){' CD'+pi}{'.'+lang}
Code: Select all
Music/{n}/{album+'/'}{pi.pad(2)+'. '}{artist} - {t}
Code: Select all
Unsorted/{file.structurePathTail}
Code: Select all
F:/{n}{"/Season $s"}/{n} - {s}{e.pad(2)} - {t}{" [$airdate.year]"}{" [$vf]"}{" [$source]"}{" [$vc]"}{" [$ac]"}{" [$group]"}
from the FAQ if you are having trouble.Q: Why does MediaInfo not work? I'm running on 64-bit Windows and installed FileBot x64?
A: If you're on 64-bit Windows but are actually running a 32-bit Java runtime, the whole java process will be in 32-bit compability mode, so the mediainfo native library also has to be the 32-bit version. Just install FileBot x86 instead, or replace mediainfo.dll with the 32-bit version.
Code: Select all
{n.upperInitial().space('.').replaceAll(/[,]+/)}.{s00e00}.{t.upperInitial().space('.').replaceAll(/[,]+/)}{'.'+vf.match(/720[pP]|1080[pP]/)}{".$source"}{".$vc"}{'-'+fn.match(/(?:(?<=[-])\w+$)|(?:^\w+(?=[-]))/)}
Code: Select all
E:\Videos\{def a; new File('E:/Videos/names.csv').splitEachLine(';'){ if (n == it[0]) a = it[1]}; a ?: n.upperInitial().replaceTrailingBrackets()}\Season {s.pad(2)}\{es*.pad(2).join(' & ').replaceAll('null',{episode.special ? 'Special '+special.pad(2):''})} - {t.upperInitial().replaceAll(/[?.:]/).replacePart(' (Part $1)')}
Code: Select all
/Users/Symon/Television/{def a; new File('/Users/Symon/Television/names.csv').splitEachLine(';'){ if (n == it[0]) a = it[1]}; a ?: n.upperInitial().replaceTrailingBrackets()}/Season {s.pad(2)}/{es*.pad(2).join(' & ').replaceAll('null',{episode.special ? 'Special '+special.pad(2):''})} - {t.upperInitial().replaceAll(/[?.:]/).replacePart(' (Part $1)')}
Code: Select all
E:/Videos/Show Name/Season 00/00 - Title
Code: Select all
Actual Show Name;Show name you want
Code: Select all
01 & 02 - Title
Code: Select all
{t.after(/^[.]+/)}
Code: Select all
..\{n.replaceFirst(/^(?i)(The|A)\s(.+)/, /$2, $1/)} {'('+y+')'}\{n} {'('+y+')'}{'.'+source}{'.'+vf}{".[CD$pi]"}{fn.match(/[.]fanart|[.]mkv/)}
Code: Select all
{n.replaceFirst(/^(?i)(The|A)\s(.+)/, /$2, $1/)} {'('+y+')'}\
Code: Select all
{n} {'('+y+')'}{'.'+source}{'.'+vf}{".[CD$pi]"}{fn.match(/[.]fanart|[.]mkv/)}
Code: Select all
"movieFormat=Movies/{n} ({y}) {genres}/{n} ({y}) {genres}{\" CD$pi\"}{\".$lang\"}"
ex: Media Library\Movies\12 Rounds (2009) [Action, Adventure, Drama, Thriller]\12 Rounds (2009) [Action, Adventure, Drama, Thriller].avi
Code: Select all
"seriesFormat=TV Shows/{n.replaceAll(\" \\(\" + y + \"\\)\",\"\")} ({y}) {genres}/{episode.special ? \"Special\" : \"Season \"+s.pad(2)}/{n} - {episode.special ? \"S00E\"+special.pad(2) : s00e00} - {t.replaceAll(/[\`\Â\´\â\€\˜\\â\€\™\Ê\»]/, \"'\").replaceAll(/[!?.]+$/).replacePart(', Part $1')}{\".$lang\"}"
ex: Media Library\TV Shows\Battlestar Galactica (2003) [Action, Adventure, Drama, Science-Fiction]\Season 01\Battlestar Galactica (2003) - S01E12 - .avi
ex: Media Library\TV Shows\Fringe (2008) [Drama, Science-Fiction]\Season 01\Fringe - S01E01 - Pilot.avi
Code: Select all
/home/user/tv/{n.replace(':',' -').replaceAll(/[?]/, '')}/{n.replace(':',' -').replaceAll(/[?]/, '')} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t.replace(':',' -').replaceAll(/[?]/, '')} {[hpi]}{'['+resolution} {' '+vc}{'-'+ac+']'}
Code: Select all
/home/user/anime/{(primaryTitle ?: n).replace(':',' -').replaceAll(/[?]/, '')}/{(primaryTitle ?: n).replace(':',' -').replaceAll(/[?]/, '')} - {episode.special ? "S"+special.pad(2) : absolute.pad(3)} - {t.replace(':',' -').replaceAll(/[?]/, '')} {[hpi]}{'['+resolution} {' '+vc}{'-'+ac+']'}
Code: Select all
filebot -rename -r "F:\Downloads" --db thetvdb -non-strict --format "F:\British TV\{folder.path.match(/Arts and Culture|Comedy|Documentary|Drama|Game Show|Horror|Kids|Motoring|Music|Mystery|Planes and Trains|Property|Radio|Reality|Sci-Fi|Soaps|Special Events|Talkshow|Travel/)}\{n.replaceAll(':|\\?',' -').replaceAll('(?i)\\s-\\s\\(uk\\)|(?i)\\s\\(uk\\)')}\Series {s}\{n.replaceAll(':|\\?',' -').replaceAll('(?i)\\s-\\s\\(uk\\)|(?i)\\s\\(uk\\)')} - {S00E00}"
Which creates :Expression wrote:E:/Video/Séries/{n}/{"Saison ${s.pad(2)}"}/{n} - {s.pad(2)}x{e.pad(2)} - {t}
Output wrote:E:\Video\Séries\Firefly\Saison 01\Firefly - 01x01 - Serenity.avi
Which creates :Expression wrote:E:/Video/Films/{"$collection/"}{n} ({y}){ [{"${fn.match(/3D/)}, "}{"${cf}, "}{"${hpi}, "}{"${vc}, "}{"${ac}"}]}
Output wrote:E:\Video\Films\Avatar Collection\Avatar (2009) [3D, mkv, 720p, x264, ac3].mkv
Which creates :Expression wrote:E:/Musique/{n}/{"$album/"}{"${album}."}{"${pi.pad(2)} - "} {t}
Output wrote:E:\Musique\Les Fatals Picards\Coming Out\Coming Out.02 - Dans mon verre.mp3
\\mynas\media\Movies\Twilight Saga, The\Twilight Saga - Eclipse, The (2010 PG-13)\Twilight Saga - Eclipse, The [720p x264 DTS 6ch].mkv
\\mynas\media\Movies\Rurôni Kenshin - Ishin Shishi E No Requiem (Samurai X - The Motion Picture) (1997 PG-15)\Rurôni Kenshin - Ishin Shishi E No Requiem [480p DivX MP3 2ch].avi
\\mynas\media\Movies\Alien Collection\Aliens (1986 R)\Aliens (Special Edition) Part 1 [360p XviD AC3 6ch].avi
\\mynas\media\Movies\Alien Collection\Aliens (1986 R)\Aliens (Special Edition) Part 2 [360p XviD AC3 6ch].avi
\\mynas\media\Movies\Sanctum 3D (2011 R)\Sanctum 3D [720p x264 AAC 6ch].mp4
Code: Select all
//mynas/media/Movies/{collection.replaceFirst(/^(?i)(The)\s(.+)/, /$2, $1/).replaceFirst(/^(?i)(Collection of the)\s(.+)/, /$2 Collection/).replaceAll(/Saga Collection/, "Saga").replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ")}\{norm = {it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ").replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() }).replaceFirst(/^(?i)(The)\s(.+)/, /$2, $1/)}; norm(n)}{if (norm(n) != norm(primaryTitle)) ' ('+norm(primaryTitle)+')'}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""} ({y}{' '+any{certification}{imdb.certification}.replaceAll(/^\d+$/, 'PG-$0')})/{norm(n)}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""}{' (' + fn.matchAll(/extended|uncensored|remastered|unrated|uncut|directors.cut|special.edition/)*.upperInitial()*.lowerTrail().sort().join(', ').replaceAll(/[._]/, " ") + ')'}{" Part $pi"}{" [$vf $vc $ac $af]"}
\\mynas\media\TV Shows\Pushing Daisies (2007 TV-PG)\Season 01\Pushing Daisies S01E01 Pie-Lette [360p XviD MP3 2ch].avi
\\mynas\media\TV Shows\Slap, The (2011 TV-MA)\Season 01\Slap, The S01E01 Hector [360p XviD MP3 2ch].avi
\\mynas\media\TV Shows\Straits, The (2012)\Season 01\Straits, The S01E01-E02 Proposition & The Trouble With Raskols, The [360p XviD MP3 2ch]
\\mynas\media\TV Shows\Looney Tunes (1930)\Season 1943\Looney Tunes S1943E01 Coal Black And De Sebben Dwarfs [240p MPEG MPEG Audio 2ch].mpeg
Code: Select all
//mynas/media/TV Shows/{norm = {it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ").replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() }).replaceFirst(/^(?i)(The)\s(.+)/, /$2, $1/)}; norm(n)}{if (norm(n) != norm(primaryTitle)) ' ('+norm(primaryTitle)+')'}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""} ({y}{' '+any{certification}{imdb.certification}.replaceAll(/^\d+$/, 'PG-$0')})/{episode.special ? 'Special' : 'Season '+s.pad(2)}/{norm(n)} {episode.special ? 'S00E'+special.pad(2) : s00e00} {norm(t)}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""}{' (' + fn.matchAll(/extended|uncensored|remastered|unrated|uncut|directors.cut|special.edition/)*.upperInitial()*.lowerTrail().sort().join(', ').replaceAll(/[._]/, " ") + ')'}{" Part $pi"}{" [$vf $vc $ac $af]"}
\\mynas\media\Anime\Blade Of The Immortal (Mugen No Juunin) (2008)\Blade Of The Immortal - 01 - Criminal [576p x264 AAC 2ch].mp4
\\mynas\media\Anime\Freezing (2011 N A)\Freezing - 01 - Untouchable Queen (Uncensored) [720p x264 AAC 2ch].mkv
\\mynas\media\Anime\One Piece (1999 TV-PG)\One Piece - 001 - I'm Luffy! The Man Who's Gonna Be King Of The Pirates! [480p XviD MP3 2ch].avi
\\mynas\media\Anime\Eternal Aseria, The [Eien No Aseria] (2005)\Eternal Aseria, The - 01 - Voice Of Motome [480p XviD MP3 2ch].avi
Code: Select all
//mynas/media/Anime/{norm = {it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ").replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/\b[0-9](?i:th|nd|rd)\b/, { it.lower() }).replaceFirst(/^(?i)(The)\s(.+)/, /$2, $1/)}; norm(n)}{if (norm(n) != norm(primaryTitle)) ' ('+norm(primaryTitle)+')'}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""} ({y}{' '+any{certification}{imdb.certification}.replaceAll(/^\d+$/, 'PG-$0')})/{norm(n)} - {absolute.pad(episodelist.size() < 99 ? 2 : 3)}{'Special '+special.pad(episodelist.size() < 99 ? 2 : 3)} - {norm(t)}{fn.contains('3D') || fn.contains('3-D') ? ' '+'3D':""}{' (' + fn.matchAll(/extended|uncensored|remastered|unrated|uncut|directors.cut|special.edition/)*.upperInitial()*.lowerTrail().sort().join(', ').replaceAll(/[._]/, " ") + ')'}{" Part $pi"}{" [$vf $vc $ac $af]"}
Code: Select all
../{primarytitle}{' ('+net.filebot.WebServices.IMDb.scrape(imdbid, '''//SPAN[@class='title-extra']''').match('"(.+)"')+')'} ({y}){' ['+fn.replaceAll(/(?i)directors|theatrical|ultimate/,'$0 Cut').matchAll(/UNRATED|REMASTERED|EXTENDED|UNCUT|DIRECTORS.CUT|THEATRICAL.CUT|ULTIMATE.CUT|SPECIAL.EDITION/).join('][').upperInitial().lowerTrail()+']'} [{vf}] [{ac}{fn.match("-HD.MA.")+af}]/{primarytitle} ({y}) {vc}{" (CD$pi)"}{' '+lang}
Code: Select all
../{primarytitle}{' ('+net.sourceforge.filebot.WebServices.....
Code: Select all
../{n}{' ("'+net.filebot.WebServices.IMDb.scrape(imdbid, '''//SPAN[@class='title-extra']''').match('"(.+)"')+'")'} ({y})/{"Season ${s.pad(2)}"}/{n} {s00e00} {t} [{vf}]{' '+lang}
Code: Select all
../{n}{' ("'+net.sourceforge.filebot.WebServices...
Code: Select all
{norm={it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/\u0022/, '\'').replaceAll(/[:|]/, '.').replaceAll(/\?/, '!').replaceAll(/[*\s\.,]+/, '.').replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/[0-9](th|nd|rd)/, { it.lower() })};isLatin = {java.text.Normalizer.normalize(it, java.text.Normalizer.Form.NFD).replaceAll(/\p{InCombiningDiacriticalMarks}+/, '') ==~ /^\p{InBasicLatin}+$/}; isLatin(info.OriginalName) ? norm(info.OriginalName) : norm(primaryTitle) }.({y}){if(isLatin(info.OriginalName) && info.OriginalName != primaryTitle && !(info.SpokenLanguages[0] ==~ /(sv|da|no)/)) '.'+ norm(primaryTitle) }{'.'+vf}{'.'+source}{fn.contains('3D') || fn.contains('3-D') ? '.3D':''}{'.'+fn.replace(/(?i)\.DC\./, '.directors.cut.').replaceAll(/director\'?s|theatrical|ultimate/,'$0.Cut').matchAll(/UNCENSORED|UNRATED|REMASTERED|EXTENDED|UNCUT|DIRECTOR\'?S.CUT|THEATRICAL.CUT|ULTIMATE.CUT|FINAL.CUT|SPECIAL.EDITION/)*.upperInitial()*.lowerTrail().sort().join('.')}{'.'+fn.matchAll(/PROPER|REPACK/)*.upper().sort().join('.')}{'.'+vc.replace('Microsoft', 'VC-1')}{'.'+ac.replace('MPEG Audio', 'MP3')}{audio.FormatProfile =~ /MA Core/ ? '-HD.MA' : ''}{audio.FormatProfile =~ /ES/ ? '-ES' : ''}{audio.FormatProfile =~ /Pro/ ? '-Pro' : ''}{'.'+af.replace('8 6ch', '7.1').replace('7 6ch', '6.1').replace('6ch', '5.1').replace('3ch', '2.1').replace('2ch','2.0').replace('1ch','1.0')}{def g = c{group}; def m = c{fn.match(/(?:(?<=[-])[a-z0-9]+$)|(?:^[a-z0-9]+(?=[-]))/)}; if(g==null && m!=null) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null && m!=null && m.lower()!=g.lower()) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null) return '-'+g;}
I would have loved to figure out how to keep the transliterated names, but using {transliterate(info.OriginalTitle)}did not work perfectly, which meant a bunch of titles missed when doing searched.Kôkaku.Kidôtai.2.0.(2008).Ghost.In.The.Shell.2.0.720p.REPACK.x264.DTS.5.1-timeshift.mkv // Latin characters but added english name
Jagten.(2012).1080p.BluRay.x264.DTS-HD.MA-GRYM.mkv // Original name only, primary language is Danish
My.Sassy.Girl.(2001).720p.BluRay.x264.AC3.5.1-EbP.mkv // Actual name is 엽기적인 그녀, or transliterated to Yeopgijeogin Geunyeo
Code: Select all
{n}/{episode.special ? 'Specials' : 'Season '+s}/{norm={it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/\u0022/, '\'').replaceAll(/[:|]/, '.').replaceAll(/\?/, '!').replaceAll(/[*\s\.]+/, '.').replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/[0-9](th|nd|rd)/, { it.lower() })};norm(n) }.{episode.special ? 'S00E'+special.pad(2) : s00e00}.{norm(t)}{'.'+vf}{'.'+source}{'.'+fn.matchAll(/PROPER|REPACK/)*.upper().sort().join('.')}{'.'+vc.replace('Microsoft', 'VC-1')}{'.'+ac.replace('MPEG Audio', 'MP3')}{audio.FormatProfile =~ /MA Core/ ? '-HD.MA' : ''}{audio.FormatProfile =~ /ES/ ? '-ES' : ''}{audio.FormatProfile =~ /Pro/ ? '-Pro' : ''}{'.'+af.replace('8 6ch', '7.1').replace('7 6ch', '6.1').replace('6ch', '5.1').replace('3ch', '2.1').replace('2ch','2.0').replace('1ch','1.0')}{def g = c{group}; def m = c{fn.match(/(?:(?<=[-])[a-z0-9]+$)|(?:^[a-z0-9]+(?=[-]))/)}; if(g==null && m!=null) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null && m!=null && m.lower()!=g.lower()) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null) return '-'+g;}
Coupling\Season 1\Coupling.S01E01.Flushed.360p.DVDRip.x264.AAC.mkv
Doctor Horrible's Sing-Along Blog\Season 1\Doctor.Horrible's.Sing-Along.Blog.S01E01.Act.I.1080p.BluRay.x264.DTS-DIMENSION.mkv
Code: Select all
filebot -script fn:amc "x:/downloads" --log-file d:\amc-run.log --output "//nas/" --action move --conflict skip -non-strict --def clean=y --def "movieFormat=Movies/{norm={it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/\u0022/, '\'').replaceAll(/[:|]/, '.').replaceAll(/\?/, '!').replaceAll(/[*\s\.,]+/, '.').replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/[0-9](th|nd|rd)/, { it.lower() })};isLatin = {java.text.Normalizer.normalize(it, java.text.Normalizer.Form.NFD).replaceAll(/\p{InCombiningDiacriticalMarks}+/, '') ==~ /^\p{InBasicLatin}+$/}; isLatin(info.OriginalName) ? norm(info.OriginalName) : norm(primaryTitle) }.({y}){if(isLatin(info.OriginalName) && info.OriginalName != primaryTitle && !(info.SpokenLanguages[0] ==~ /(sv|da|no)/)) '.'+ norm(primaryTitle) }{'.'+vf}{'.'+source}{fn.contains('3D') || fn.contains('3-D') ? '.3D':''}{'.'+fn.replace(/(?i)\.DC\./, '.directors.cut.').replaceAll(/director\'?s|theatrical|ultimate/,'$0.Cut').matchAll(/UNCENSORED|UNRATED|REMASTERED|EXTENDED|UNCUT|DIRECTOR\'?S.CUT|THEATRICAL.CUT|ULTIMATE.CUT|FINAL.CUT|SPECIAL.EDITION/)*.upperInitial()*.lowerTrail().sort().join('.')}{'.'+fn.matchAll(/PROPER|REPACK/)*.upper().sort().join('.')}{'.'+vc.replace('Microsoft', 'VC-1')}{'.'+ac.replace('MPEG Audio', 'MP3')}{audio.FormatProfile =~ /MA Core/ ? '-HD.MA' : ''}{audio.FormatProfile =~ /ES/ ? '-ES' : ''}{audio.FormatProfile =~ /Pro/ ? '-Pro' : ''}{'.'+af.replace('8 6ch', '7.1').replace('7 6ch', '6.1').replace('6ch', '5.1').replace('3ch', '2.1').replace('2ch','2.0').replace('1ch','1.0')}{def g = c{group}; def m = c{fn.match(/(?:(?<=[-])[a-z0-9]+$)|(?:^[a-z0-9]+(?=[-]))/)}; if(g==null && m!=null) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null && m!=null && m.lower()!=g.lower()) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null) return '-'+g;}" --def "seriesFormat=TV Shows/{n}/{episode.special ? 'Specials' : 'Season '+s}/{norm={it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/\u0022/, '\'').replaceAll(/[:|]/, '.').replaceAll(/\?/, '!').replaceAll(/[*\s\.]+/, '.').replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/[0-9](th|nd|rd)/, { it.lower() })};norm(n) }.{episode.special ? 'S00E'+special.pad(2) : s00e00}.{norm(t)}{'.'+vf}{'.'+source}{'.'+fn.matchAll(/PROPER|REPACK/)*.upper().sort().join('.')}{'.'+vc.replace('Microsoft', 'VC-1')}{'.'+ac.replace('MPEG Audio', 'MP3')}{audio.FormatProfile =~ /MA Core/ ? '-HD.MA' : ''}{audio.FormatProfile =~ /ES/ ? '-ES' : ''}{audio.FormatProfile =~ /Pro/ ? '-Pro' : ''}{'.'+af.replace('8 6ch', '7.1').replace('7 6ch', '6.1').replace('6ch', '5.1').replace('3ch', '2.1').replace('2ch','2.0').replace('1ch','1.0')}{def g = c{group}; def m = c{fn.match(/(?:(?<=[-])[a-z0-9]+$)|(?:^[a-z0-9]+(?=[-]))/)}; if(g==null && m!=null) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null && m!=null && m.lower()!=g.lower()) return '-'+m.replace(/^tpz$/, 'TOPAZ'); if(g!=null) return '-'+g;}"
Code: Select all
{'H:/Live Action/[Naming]/'}{if (s3d) '3D/'}{model.episodes.flatten().containsAll(episodelist.findAll{it.season == s && it.episode && it.title}) ? '[Finished]/' : '[Current Seasons]/'}{if (episode.special) '[Finished]/'}{csv('C:/FileBot Settings/TV/TVGenreFolderBasedOnSeriesName.csv').get(n) ?: genre +'/'}{norm = {it.upperInitial().lowerTrail().replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/.web./, "web-dl").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ").replaceAll(/\b[IiVvXx]+\b/, { it.upper()}).replaceAll(/\b[0-9](?i:th|nd|rd)\b/, {it.lower()})}; norm(n).replaceFirst(/^(?i)(The|A|An)\s(.+)/, /$2, $1/).replaceTrailingBrackets()}{' '+n.match(/\([A-Z]+\)$/)}{if (norm(n) != norm (primaryTitle)) ' ('+norm(primaryTitle)+')'}{s3d ? ' '+'3D':""}{if (y) {' ['+y +']'}}{' '+any{"[$certification]"}{"["+$imdb.certification+"]" }.replaceAll('N A','').replaceAll(/^ \d+$/, 'PG-$0')}{" [$rating" + "★]"} [{csv('C:/FileBot Settings/TV/TVNetwork.csv').get(info.network) ?: info.network }]/{[episodelist.findAll{ it.season == s }.airdate.year.min()]}{episode.special ? '[Specials]' : ' - Season '+s.pad(2)}{' '}{' (' + file.path.matchAll(/extended|uncensored|remastered|unrated|uncut|unedited|directors.cut|special.edition|unsold.pilot|broadcast.version|alternate.ending|with.original.commercials|reconstructed|with.commercials|unaired.pilot|unaired.episode/).unique()*.upperInitial()*.lowerTrail().sort().join(') (').replaceAll(/ [._]/, " ") +') '}{episode.special ? '': {def sources = model.findAll{ it.n == n && it.s == s }.source.minus(null).unique(); sources.size() >= 1 ? sources.size() == 1 ? sources : '[Mixed]' : (fn.upper() =~ /.WEB.|WEBDL|WEB.DL/ ? /[WEB-DL]/ : '[No Source]')}}{model.episodes.flatten().containsAll(episodelist.findAll{it.season == s && it.episode && it.title}) ? '' : ' [Incomplete]'}/{csv('C:/FileBot Settings/TV/TVFileShowNames.csv').get(n) ?: norm(n).replaceTrailingBrackets()}{' '+n.match(/\([A-Z]+\)$/)}{' '+n.match(/\([0-9]+\)$/)} {'- '+S00E00+' -'} {norm(t.replaceAll("\\s*[(]([^)]*)[)]\$", { group, match -> ' (Part '+match.pad(2)+')' }))}{if (episode.special) ' [Special]'}{s3d ? ' '+'3D':""}{' (' + file.path.matchAll(/extended|uncensored|remastered|unrated|uncut|unedited|directors.cut|special.edition|unsold.pilot|broadcast.version|alternate.ending|with.original.commercials|reconstructed|with.commercials|unaired.pilot|unaired.episode/).unique()*.upperInitial()*.lowerTrail().sort().join(') (').replaceAll(/ [._]/, " ") + ')'}{" Part $pi"}{" [$minutes Min]"}{airdate.format(" [MM.dd.yyyy]")}{fn.upper() =~ /.WEB.|WEBDL|WEB.DL/ ? / [WEB-DL]/ :" ["+any{source}{'No Source'}+"]"}{" [$vf $ac $af]"}
Code: Select all
{any{if (file.path.lower().matchAll(/(3d|half|full|h?sbs|f?sbs|(?i)(?<=^|[^a-z])hou(?=$|[^a-z])|(?i)(?<=^|[^a-z])fou(?=$|[^a-z])|f.ou|anaglyth)(?:.sbs|(?i)(?<=^|[^a-z])cat(?=$|[^a-z]))?/)){'C:/[3D Movies]/'}}{'C:/Movies/'}}{any{def map=['erinbrown':'[Actors]/Erin Brown','stephenking':'[Stephen King]']; actors.join(', ').lower().replaceAll(/[\W]/, "").matchAll(/erinbrown|stephenking/).findResults{ map[it] }.join(',')+'/'}{def map=[/rifftrax/:'RiffTrax','miniseries':'Mini-Series','monstervision':'MonsterVision','fanedit':'FanEdits','usaupallnight':'USA Up All Night',/elvirasmoviemacabre/:'Elvira\'s Movie Macabre']; '['+file.path.lower().replaceAll(/[\W]/, "").matchAll(/monstervision|rifftrax|fanedit|usaupallnight|elvirasmoviemacabre/).findResults{ map[it].replaceAll("\\[|\\]", "") }.sort{ map.values().indexOf(it)}.join(',')+']/'}{(info.SpokenLanguages.displayLanguage.contains(/English/)) ? '' : '[Foreign Films]/'}}{any{if (genres.join(', ').matchAll(/^(?=.*drama)(?=.*history|biography)/))('Docudrama')}{if (genres.join(', ').matchAll(/animation/))('Animation/')}{any{if (genres.join(', ').matchAll(/musical/))('Musicials/')}{if (omdb.genres.join(', ').matchAll(/musical/))('Musicials/')}}{(csv('C:/FileBot Settings/Movies/MovieGenres.csv').get(n))}{genre}{'[No Genre]'}}/{norm = {it.upperInitial().lowerTrail().replaceTrailingBrackets().replaceAll(/[`´‘’ʻ""“”]/, "'").replaceAll(/[:|]/, " - ").replaceAll(/[?]/, "!").replaceAll(/[*\s]+/, " ").replaceAll(/\b[IiVvXx]+\b/, { it.upper() }).replaceAll(/\b[0-9](?i:th| nd|rd)\b/, { it.lower() }).replaceFirst(/^(?i)(The)\s(.+)/, /$2, $1/)}; norm(n)}{if (norm(n) != norm(primaryTitle)) ' ('+norm(primaryTitle)+')'}{" (Part ${pi.pad(2)})"}{" ["+file.path.lower().replace(/dc/, 'director\'s cut').replaceAll('limited','limited release').replaceAll('directors','director\'s').replaceAll('-','').replaceAll(/director.s|theatrical/,'$0 Cut').matchAll(/(uncensored|uncut|unrated|remastered|ultimate|extended|director?s|theatrical|ultimate|final|bootleg|special|fan?edit?|limited|rifftrax|monstervision|youtube|hulu|netflix|vimeo|edited|edit|censored+)(?:.edition|.cut|.version|.edit|.release|.extended|.rip)?/)*.upperInitial()*.lowerTrail().sort().join('] [')+']'}{def map=['3d':'3D','hsbs':'Half-SBS','halfsbs':'Half-SBS','fsbs':'Full-SBS','fullsbs':'Full-SBS','sbs':'SBS','halfou':'Half-OU','fullou':'Full-OU','overunder':'OU','anaglyth':'Anaglyth']; " ("+ ((file.path.lower().contains(/3d/)) ? '' : '3D ')+ file.path.lower().replaceAll(/(?i)(?<=^|[^a-z])hou(?=$|[^a-z])/,'halfou').replaceAll(/(?i)(?<=^|[^a-z])fou(?=$|[^a-z])/,'fullou').replaceAll(/(?i)(?<=^|[^a-z])ou(?=$|[^a-z])/,'overunder').replaceAll(/[\W]/, "").matchAll(/3d(?!.*?3d)|hsbs(?!.*?hsbs)|halfsbs(?!.*?halfsbs)|fsbs(?!.*?fsbs)|fullsbs(?!.*?fullsbs)|sbs(?!.*?sbs)|halfou(?!.*?halfou)|fullou(?!.*?fullou)|overunder(?!.*?overunder)|anaglyth(?!.*?anaglyth)/).findResults{ map[it]}.sort().join(' ')+')'}{any{" ["+d.format("yyyy")+"]"}{y}}{info.SpokenLanguages.displayLanguage.contains(/English/) ? '' : " ["+any{(audios.language[1]) ? (csv('C:/FileBot Settings/All/Locales.csv').get(audios.language[0]))+", "+(csv('C:/FileBot Settings/All/Locales.csv').get(audios.language[1])) : (csv('C:/FileBot Settings/All/Locales.csv').get(audios.language[0]))}{(info.SpokenLanguages.displayLanguage.join(', '))}+"]"}{' ['+any{certification} {omdb.certification}.replaceAll(/^\d+$/, 'PG-$0').replaceAll('N A','No Certification')+']'}{" [$minutes Min]"}{" ["+(rating)+"★]"}{" ["+any{(csv('C:/FileBot Settings/Movies/MovieSource.csv').get(source))}{(source)}{'No Source'}+"]"}{" [$vf] [$ac "+af.replace('8ch', '7.1ch').replace('7ch', '6.1ch').replace('6ch', '5.1ch').replace('3ch', '2.1ch').replace('2ch','2.0ch')+"]"}{" ("+actors.take(3).join(', ')+")"}{any{" ("+omdb.genres.take(3).join(', ')+")"}{" ("+genres.take(3).join(', ')+")"}}
Code: Select all
>>-- this is the start of the MOVIE_FORMAT definition, with opening curly brackets
{
MOVIE_FORMAT= {it.upperInitial() .lowerTrail().replaceAll(/[`´‘’“”""]/, "'").replaceAll(/[*^]/, "-").replaceAll(/[;]/, ", ").replaceAll(/[?|]/, "!").replaceAll(/ /, " ").replaceAll(/[:]/, "-").replaceAll(/[*\s]+/, " ")};
MOVIE_FORMAT(n).replaceFirst(/^(?i)(The|A|An)\s(.+)/, /$2, $1/).replaceAll(/\b(?i:it)+\b/, {it.upperInitial()})
}
<<-- this is the end of the MOVIE_FORMAT definition with closing curly brackets
{alias ?: ''}
{info.SpokenLanguages.displayLanguage.contains(/English/) ? '' : " [Lang= "+(info.SpokenLanguages.displayLanguage[0]).upper()+"]"}
({y})
[{(info.runtime).replaceAll('min', '')} min]
{actors.take(3)}
{genres.take(3)}
Code: Select all
F:/Filme{fn =~ /3D/ ? ' 3D' : ''}{fn =~ /3d/ ? ' 3D' : ''}/{collection+'/'}{n} ({y}) {genres}/{n} ({y}) ({vf}) ({af}){fn =~ /3dhsbs/ ? '.3D.H-SBS' : ''}{fn =~ /H-SBS/ ? '.3D.H-SBS' : ''}{fn =~ /3dhou/ ? '.3D.H-OU' : ''}{fn =~ /H-OU/ ? '.3D.H-OU' : ''}{' - CD'+pi}
Code: Select all
\{n.replaceTrailingBrackets()} {'S'+s.pad(2)} ({episodelist.findAll{it.season == s}.airdate.year[0,1].unique().join('-')})\{n.replaceTrailingBrackets()} {'S'+s.pad(2)} E{e.pad(2)} - {t} - {try{source}catch(e){'WEB-DL'}}.{vf}.{ac}.{af.replace('6ch','5.1')}.{try{group}catch(e){''}}
Code: Select all
G:\TV\{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}/{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}
({any{self.d}{'0000-00-00'}})
[{info.network}]
{episode.special ? 'S00E'+special.pad(2) : s00e00}
{t.after(/^[.]+/).replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}
{self.vf ? self.vf + "" : self.hpi}
{"${self.source ?: 'NA'}"}
{ac}
{audio[0].channels.replaceAll(/2/, "2ch").replaceAll(/6/, "5.1ch")} {vc}_{any{"$group"}{fn.match(/(?<=[_-])[^\s_-]+?$/)}{'NA'}.replaceAll(/[-_\[\]]\s*|\.\w{3}$/, "")}{any{'.'+lang}{lang}}{any{fn.match(/(?i)sdh.+?/)('')}{fn.match(/(?i).*sdh.*/)('_SDH')}}{any{fn.match(/(?i)\(foreignpartsonly\)/)}{''}}{"."+ext}
Code: Select all
{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}
({y})
{fn.matches(/(?i).+25th.+?anniv.+/) ? "(25th Anniv. Edition)" : ""}
{fn.matches(/(?i).+\(limited.*?\).+/) ? "(Limited Edition)" : ""}
{fn.matches(/(?i).+\(uncut.*?\).+/) ? "(Uncut)" : ""}
{fn.matches(/(?i).+collector.+?s.+?edition.+/) ? "(Collector's Edition)" : ""}
{fn.matches(/(?i).+direct.+?cut.+/) ? "(Director's Cut)" : ""}
{fn.matches(/(?i).+extended.+?edit.+/) ? "(Extended Edition)" : ""}
{fn.matches(/(?i).+imax.+?edition.+/) ? "(IMAX Edition)" : ""}
{fn.matches(/(?i).+remastered.+/) ? "(Remastered)" : ""}
{fn.matches(/(?i).+unrated.+/) ? "(Unrated)" : ""}
{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {""}{''}}
{self.vf ? self.vf + "" : self.hpi}
{"${self.source ?: 'WEB-DL'}"}
{ac}
{audio[0].channels.replaceAll(/^(\d{1}).*/,'$1')replaceAll(/2/, "2ch").replaceAll(/6/, "5.1ch").replaceAll(/8/, "7.1ch")}
{vc}_{any{"$group"}{fn.match(/(?<=[_-])[^\s_-]+?$/)}{'NA'}.replaceAll(/[-_\[\]]\s*|\.\w{3}$/, "")}
/
{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}
({y})
{fn.matches(/(?i).+25th.+?anniv.+/) ? "(25th Anniv. Edition)" : ""}
{fn.matches(/(?i).+\(limited.*?\).+/) ? "(Limited Edition)" : ""}
{fn.matches(/(?i).+\(uncut.*?\).+/) ? "(Uncut)" : ""}
{fn.matches(/(?i).+collector.+?s.+?edition.+/) ? "(Collector's Edition)" : ""}
{fn.matches(/(?i).+direct.+?cut.+/) ? "(Director's Cut)" : ""}
{fn.matches(/(?i).+extended.+?edit.+/) ? "(Extended Edition)" : ""}
{fn.matches(/(?i).+imax.+?edition.+/) ? "(IMAX Edition)" : ""}
{fn.matches(/(?i).+remastered.+/) ? "(Remastered)" : ""}
{fn.matches(/(?i).+unrated.+/) ? "(Unrated)" : ""}
{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {""}{''}}
{self.vf ? self.vf + "" : self.hpi}
{"${self.source ?: 'WEB-DL'}"}
{ac}
{audio[0].channels.replaceAll(/^(\d{1}).*/,'$1')replaceAll(/2/, "2ch").replaceAll(/6/, "5.1ch").replaceAll(/8/, "7.1ch")}
{vc}_{any{"$group"}{fn.match(/(?<=[_-])[^\s_-]+?$/)}{'NA'}.replaceAll(/[-_\[\]]\s*|\.\w{3}$/, "")}{any{'.'+lang}{lang}}{fn.matches(/(?i).+sdh.+/) ? "_SDH" : ""}{any{fn.match(/(?i)\(foreignpartsonly\)/)}{''}}{"."+ext}
Code: Select all
{n.replace(':','-').replaceAll(/[\/:*?"<>|]/,' - ')}
({y})
{fn.matches(/(?i).+25th.+?anniv.+/) ? "(25th Anniv. Edition)" : ""}
{fn.matches(/(?i).+\(limited.*?\).+/) ? "(Limited Edition)" : ""}
{fn.matches(/(?i).+\(uncut.*?\).+/) ? "(Uncut)" : ""}
{fn.matches(/(?i).+collector.+?s.+?edition.+/) ? "(Collector's Edition)" : ""}
{fn.matches(/(?i).+direct.+?cut.+/) ? "(Director's Cut)" : ""}
{fn.matches(/(?i).+extended.+?edit.+/) ? "(Extended Edition)" : ""}
{fn.matches(/(?i).+imax.+?edition.+/) ? "(IMAX Edition)" : ""}
{fn.matches(/(?i).+remastered.+/) ? "(Remastered)" : ""}
{fn.matches(/(?i).+unrated.+/) ? "(Unrated)" : ""}
{any{fn.match(/\([^\()+?[^\d]+?\)\s*/)} {""}{''}}
{self.vf ? self.vf + "" : self.hpi}
{"${self.source ?: 'WEB-DL'}"}
{ac}
{audio[0].channels.replaceAll(/^(\d{1}).*/,'$1')replaceAll(/2/, "2ch").replaceAll(/6/, "5.1ch").replaceAll(/8/, "7.1ch")}
{vc}_{any{"$group"}{fn.match(/(?<=[_-])[^\s_-]+?$/)}{'NA'}.replaceAll(/[-_\[\]]\s*|\.\w{3}$/, "")}{any{'.'+lang}{lang}}{fn.matches(/(?i).+sdh.+/) ? "_SDH" : ""}{any{fn.match(/(?i)\(foreignpartsonly\)/)}{''}}{"."+ext}
Code: Select all
{n.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")} ({y})/{n.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")} ({y}){' - '+vf.replaceAll("360p","SD").replaceAll("240p","LD")}{'.'+lang}
Code: Select all
{n.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")}/{n.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")} - S{(episode.special ? 0 : episode.season ? s : 1).pad(2)}E{episode.special ? special.pad(2) : e.pad(2)} - {t.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")}{' - '+vf.replaceAll("360p","SD").replaceAll("240p","LD")}{'.'+lang}
Code: Select all
{n.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")}\{album.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")}\{pi.pad(2)} - {t.replaceAll(/[:*?"<>|?]/).replaceAll(/[`´‘’?]/, "'")}
Code: Select all
.replaceAll(/&/,"and").replaceAll(/#/,"number").replaceAll("[^a-zA-Z0-9_-]", "")
Code: Select all
.replaceAll("[^a-zA-ZÀ-ÿ0-9_-]", "")
Code: Select all
{".$source"}
Code: Select all
{n.space('_').replaceAll(/&/,"and").replaceAll(/#/,"number").replaceAll("[^a-zA-Z0-9_-]", "")}.{s00e00.lower()}.{t.space('_').replaceAll(/&/,"and").replaceAll(/#/,"number").replaceAll("[^a-zA-Z0-9_-]", "").lowerTrail().replacePart('Part_$1')}{".$airdate.month"}{"-$airdate.day"}{"-$airdate.year"}{".$resolution"}{".$source"}{".$af"}{".$ac"}{".$vf"}{".$vc".replace('AVC','x264').replace('HEVC','x265')}
Code: Select all
{artist}.{album}.{pi.pad(2)}_-_{t.space('_').replaceAll(/&/,"and").replaceAll(/#/,"number").replaceAll("[^a-zA-Z0-9_-]", "")}{".[$media.OverallBitrateString]".replaceAll(/null/, "variable")}
Code: Select all
{n.space('_').replaceAll(/&/,"and").replaceAll(/#/,"number").replaceAll("[^a-zA-Z0-9_-]", "").lowerTrail().replacePart('Part_$1')}.{y}{".$resolution"}{".$vc"}{".$vf"}{".$source"}{".$ac"}{".$af"}
Code: Select all
{['F:', 'G:'].collect{ (it+'/'+n) as File }.sort{ a, b -> a.exists() <=> b.exists() ?: a.diskSpace <=> b.diskSpace }.last()}/Season {s}/{n} {s00e00} {episode.title}
Code: Select all
F:\Chicago P.D\Season 2\Chicago P.D. S02E09 Called In Dead (1).avi
Code: Select all
{if (media.'Album/Performer'!=null && (media.'Album/Performer'!=media.'Performer')) return (media.'Performer'!=n?n+'/':media.'Album/Performer'+'/') else n+'/'}
{if (media.'Original/Released_Date'!=null||media.'Original/Released_Date'!=Y) return (media.'Original/Released_Date'!=null?media.'Original/Released_Date'.truncate(4):Y)+' - ' else (Y!=null?Y+' - ':date.truncate(4)+' - ')}
{album.replace(/:/,/,/).replaceAll(/"|`/,/'/)}
{if (media.'musicbrainz.album.type'!=null&&media.'musicbrainz.album.type'=~"/") return (album=~/Live|LIVE|live|oundtrack|Best Of|best of|reatest|Remix|remix|ollection/?'':' - '+(media.'musicbrainz.album.type'.upperInitial().split("/")[1])) else (album=~/ EP/||media.'musicbrainz.album.type'=="album"||"other"?'':' - '+media.'musicbrainz.album.type'.upper())}
{media.'Part/Position_Total'<'2' ? "" : ' ('+media.'Part/Position_Total'+'CD)'}
{ext=='mp3'?"":" "+[EXT.upper()]}
{media.'part/position'==null||media.'Part/Position_Total'<'2' ? "" : '/CD'+media.'part/position'}/
{pi.pad(2)+' - '}
{media.'Album/Performer'==media.'Performer' ? "" : (media.'Performer').replaceAll('/',', ')+' - '}
{t.replace(/:/,/,/).replaceAll(/"|`/,/'/)}
Code: Select all
/Users/Guest/Public/TV/{def n00 = any{collection}{n}.sortName().charAt(0); n00.isDigit() ? '0-9' : n00}/{collection+'/'}{n}/{episode.special ? 'Special' : 'Season '+s.pad(2)}/{n} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t.replaceAll(/[`´‘’ʻ]/, /'/).replaceAll(/[!?.]+$/).replacePart(', Part $1')} [{airdate}]{' _'+certification+'_'} {hd}
Code: Select all
/Volumes/Multimedia/TV/{def n00 = any{collection}{n}.sortName().charAt(0); n00.isDigit() ? '0-9' : n00}/{collection+'/'}{n}/{episode.special ? 'Special' : 'Season '+s.pad(2)}/{n} - {episode.special ? 'S00E'+special.pad(2) : s00e00} - {t.replaceAll(/[`´‘’ʻ]/, /'/).replaceAll(/[!?.]+$/).replacePart(', Part $1')} [{airdate}]{' _'+certification+'_'} {hd}
Code: Select all
/Users/Guest/Public/Cinema/{def n00 = any{collection}{n}.sortName().charAt(0); n00.isDigit() ? '0-9' : n00}/{collection+'/'}{n}/{n} ({y}){" ["+pi+'of'+pn+']'} _{certification}_ star-{rating} -- {'t-'+minutes} {hd} {'hpi-'+hpi} {'af-'+af} {'vc-'+vc} {'ac-'+ac}
Code: Select all
/Volumes/Multimedia/Cinema/{def n00 = any{collection}{n}.sortName().charAt(0); n00.isDigit() ? '0-9' : n00}/{collection+'/'}{n}/{n} ({y}){" ["+pi+'of'+pn+']'} _{certification}_ star-{rating} -- {'t-'+minutes} {hd} {'hpi-'+hpi} {'af-'+af} {'vc-'+vc} {'ac-'+ac}
Code: Select all
/Volumes/Multimedia/Cinema/{def n00 = any{collection}{n}.sortName().charAt(0); n00.isDigit() ? '0-9' : n00}/{collection+'/'}{n}/{n} ({y}){" ["+pi+'of'+pn+']'} _{certification}_ star-{rating+'★'} -- {'t-'+minutes} {hd} {'hpi-'+hpi} {'af-'+af} {'vc-'+vc} {'ac-'+ac}
Users browsing this forum: No registered users and 6 guests