Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :: By JaCk | DevStable 07/26/2017 | https://pastebin.com/26ezgSpq | gifdir.bat -- uses ffmpeg_gifme.bat [ https://pastebin.com/JGL83SM8 ] to create gifs recursively through a directory tree
- @echo off && setlocal EnableDelayedExpansion EnableExtensions && (for /f "tokens=1 delims==" %%a in ('set gf_') do set "%%a=") 2>nul 1>nul
- @title %~nx0 -- Dr.GIF'd with Gifmei Haurdor
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :::::: ::::::
- :::: Development Version ::::
- :::: USE AT YOUR OWN RISK ::::
- :::::: ::::::
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :::::::::::::::::::::::::::::::::::::::
- :: user settings
- :::::::::::::::::::::::::::::::::::::::
- rem :: Default: [undef] :: Type: dir location :: Accepted Values: [relative/absolute path] :: Description: -- hardcoded base directory
- set "gf_rpath="
- :::::::::::::::::::::::::::::::::::::::
- :: script setttings
- :::::::::::::::::::::::::::::::::::::::
- rem :: Default: .avi .mkv :: Type: space delin list :: Accepted Values: [.ext1 .ext2] :: Description: -- extension list of video files
- set "gf_extensions=.avi .mkv .mpg .mpeg .webm .mp4 .ogm .mov .flv .bik"
- rem :: Default: true :: Type: Bi-State Boolean :: Accepted Values: [true/undef] :: Description: -- To dump files needed to be processed in the total counter :: Personal Note :: It helps as a sanity check, especially when doing large quantity of files/directories to have this enabled.
- set "gf_dump_pre_process_list=true"
- rem :: Default: true :: Type: Bi-State Boolean :: Accepted Values: [true/undef] :: Description: -- Set windows console encoding env to UTF8 to enable processing of non-latin characters. Disable if you encounter weird problems with naming.
- set "gf_utf8_support=true"
- :::::::::::::::::::::::::::::::::::::::
- :: script magic-de-do-dads
- :::::::::::::::::::::::::::::::::::::::
- :: UTF8 support -- Grab current encoding setting - when needed, change it to utf8
- if defined gf_utf8_support (
- for /f "tokens=2 delims=:" %%c in ('chcp') do set "gf_chcp_orig=%%c"
- if !gf_chcp_orig! neq 65001 (
- chcp 65001 2>nul 1>nul || (
- echo/ ERROR: CHCP: UTF8 Support unavailible
- chcp !gf_chcp_orig! 2>nul 1>nul
- set "gf_chcp_orig="
- )
- ) else (
- set "gf_chcp_orig="
- )
- )
- :: params
- if "%~1" neq "" (
- set "gf_rpath=%*"
- )
- :: popd like you've never popd before
- if !pushme_gf! geq 1 for /l %%P in (1,1,!pushme_gf!) do (
- popd
- echo Info: pushme_gf: [%%P]: Stale Popds found... BAM - Blopd de-Popd-eded
- echo Info: pushme_gf: [%%P]: Current Directory: [!cd!]
- set /a "pushme_gf-=1"
- )
- :: prompts
- if not defined gf_rpath (
- set "gf_rpath=!cd!"
- echo/&echo/&echo/
- echo/_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- echo/_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_~_
- echo/
- echo/ ~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
- echo/ Input: Base Directory Path:
- echo/
- echo/ Default ~^> !gf_rpath!
- echo/ ~-~ ~-~ ~-~ ~-~ ~-~
- set /p "gf_rpath= ~>"
- echo/ ~-~ ~-~ ~-~ ~-~ ~-~
- echo/-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
- )
- :: when double-quoted path, remove first and last double-quotes
- if defined gf_rpath if "!gf_rpath:~0,1!!gf_rpath:~-1,1!" equ """" set "gf_rpath=!gf_rpath:~1,-1!"
- :: f-u error-checking -- no purdy msgs, just f-u and gtfo
- if not defined gf_rpath goto :eof
- if not defined gf_extensions goto :eof
- :::::::::::::::::::::::::::::::::::::::
- ::
- :: Setup Script
- ::
- :::::::::::::::::::::::::::::::::::::::
- :: fixing extension list formatting -- make sure [no commas][space-delin][eol regex marker]
- for %%X in (!gf_extensions!) do set "gf_ext_li=%%X$ !gf_ext_li!"
- echo/&echo/&echo/&echo/&echo/&echo/
- echo/ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- echo/-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- echo/ `'` `'` `'` `'` `'` `'` `'` `'` `'` `'`
- echo/
- if defined gf_dump_pre_process_list (
- echo/ -- GifDir: Info: Fluffing TollTalls and Dumpling filletnames
- ) else (
- echo/ -- GifDir: Info: Tallying Gif'd'ed Counts
- )
- echo/ -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- :: Total Possible files matching extension list
- :: for /f "tokens=1* delims=" %%A in ('dir /b /o:-n /a:-d /s "!gf_rpath!" ^| findstr /i "!gf_ext_li!" ^| find /c " "') do set "gf_total_matching_files=%%A"
- :: For roll call, getting missing Count Gif, He'll be write back
- set "gf_total_cnt=0"
- for /f "tokens=1* delims=" %%A in ('dir /b /o:-n /a:-d /s "!gf_rpath!" ^| findstr /i "!gf_ext_li!"') do (
- set /a "gf_total_matching_files+=1"
- if not exist "%%~dpnA.gif" (
- set /a "gf_total_cnt+=1"
- if defined gf_dump_pre_process_list echo/ [!gf_total_cnt!]: "%%~nxA"
- )
- )
- :: get string length of gf_total_cnt
- if !gf_total_cnt! geq 10 (
- set "gf_P=!gf_total_cnt!#"
- for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!gf_P:~%%P,1!" NEQ "" (
- set /a "gf_zcount+=%%P"
- for /l %%q in (1,1,%%P) do set "gf_z=0!gf_z!"
- set "gf_P=!gf_P:~%%P!"
- )
- )
- ) else (
- set "gf_zcount=1"
- set "gf_z=0"
- )
- :: get string length of gf_total_matching_files
- if !gf_total_matching_files! geq 10 (
- set "gf_P=!gf_total_matching_files!#"
- for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!gf_P:~%%P,1!" NEQ "" (
- set /a "gf_bmatchcount+=%%P"
- set "gf_P=!gf_P:~%%P!"
- for /l %%q in (1,1,%%P) do set "gf_mz=0!gf_mz!"
- )
- )
- ) else (
- set "gf_bmatchcount=1"
- set "gf_mz=0"
- )
- :: pretty colors.... em... I mean... Pretty numbers
- :: pad em first :: trim the fat
- if defined gf_mz if defined gf_total_cnt if defined gf_bmatchcount (
- set "gf_scount_tl=!gf_mz:0= !!gf_total_cnt!"
- set "gf_scount_tl=!gf_scount_tl:~-%gf_bmatchcount%!"
- set "gf_smatchedf=!gf_mz!!gf_total_matching_files!"
- set "gf_smatchedf=!gf_smatchedf:~-%gf_bmatchcount%!"
- rem note - todo - finish making this purdy
- set "gf_empty_wshc=%gf_bmatchcount%"
- set "gf_empty_wspace= "
- set "gf_empty_wspace=!gf_empty_wspace:~%gf_empty_wshc%!"
- )
- :: LFM -- Looking for more; totals
- :: WTBGif -- Gifs to be created by %~nx0
- :: ICanHasGif -- Candidate Files for giffing by %~nx0
- if not !gf_total_cnt! gtr 0 (
- echo/ No gif-able files found
- )
- echo/ -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- if defined gf_smatchedf if defined gf_scount_tl (
- echo/ !gf_empty_wspace!~-~ # Gif Needed: !gf_scount_tl! ~-~ !gf_empty_wspace!
- echo/ !gf_empty_wspace!~-~ # Total Checked: !gf_smatchedf! ~-~ !gf_empty_wspace!
- ) else (
- echo/ !gf_empty_wspace!~-~ Creating [!gf_smatchedf!] Gifs ~-~ !gf_empty_wspace!
- )
- echo/ -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- echo/
- echo/ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
- echo/-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- echo/ `'` `'` `'` `'` `'` `'` `'` `'` `'` `'`
- echo/
- if not !gf_total_cnt! gtr 0 goto :eof
- :::::::::::::::::::::::::::::::::::::::
- ::
- :: Main
- ::
- :::::::::::::::::::::::::::::::::::::::
- :: run it
- echo/
- echo/ -- GifDir: Info: Main: [!date:~0,3! !time:~0,-6!]: Find em n gif-em
- echo/ -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
- for /f "tokens=1* delims=" %%A in ('dir /b /o:-n /a:-d /s "!gf_rpath!" ^| findstr /i "!gf_ext_li!"') do (
- if "!cd!\" neq "%%~dpA" (
- popd
- set /a "pushme_gf-=1"
- pushd "%%~dpA"
- set /a "pushme_gf+=1"
- set "gf_dpush_msg=true"
- )
- if exist "%%~nxA" if not exist "%%~nA.gif" (
- set /a "gf_current_cnt+=1"
- set /a "gf_count_perc=!gf_current_cnt!00 / !gf_total_cnt!"
- set "gf_count_perc=!gf_count_perc!%%"
- set "gf_zcurrent_cnt=!gf_z!!gf_current_cnt!"
- set "gf_zcurrent_cnt=!gf_zcurrent_cnt:~-%gf_zcount%!"
- echo/
- if defined gf_dpush_msg (
- echo/
- echo/ -- GifDir: Pushd Dir: "%%~dpA"
- set "gf_dpush_msg="
- )
- echo/ -- GifDir[!gf_count_perc!] !time:~0,-6!: File: !gf_zcurrent_cnt!/!gf_total_cnt! ~ "%%~nxA"
- call ffmpeg_gifme.bat "%%~nxA" "%%~nA.gif" "%%~nA.palette.png"
- if exist "%%~nA.gif" call attrib +H /S /D /L "%%~nA.gif"
- if exist "%%~nA.palette.png" call attrib +H /S /D /L "%%~nA.palette.png"
- )
- )
- :::::::::::::::::::::::::::::::::::::::
- ::
- :: Destroy env changes made by me
- ::
- :::::::::::::::::::::::::::::::::::::::
- :: Last minute popd-ing (when you gotta go, you go), setting up blanks (better than shooting em), and ending any local relationships (its not you, its me)
- if defined pushme_gf for /l %%p in (1,1,!pushme_gf!) do ( call popd && set /a "pushme_gf-=1" )
- if !pushme_gf! leq 0 set "pushme_gf=
- if defined gf_chcp_orig chcp !gf_chcp_orig! 1>nul
- (for /f "tokens=1 delims==" %%a in ('set gf_') do set "%%a=") 2>nul 1>nul
- endlocal
Advertisement