@echo off color 3f set releaseDate=31.01.2018 title fastscraper ver. %releaseDate% rem Set ScreenScraper credentials set username="" set password="" rem Dictionary (auto, es, de, fr, en) set lang=auto rem Flags - Static parameters rem If true, add roms that are not found as an empty gamelist entry. set addNotFound=-add_not_found=false rem Comma-separated order to prefer images, s=snapshot, b=boxart, f=fanart, a=banner, l=logo, 3b=3D boxart, cart=cartridge, clabel=cartridge label, mix3=Standard 3 mix, mix4=Standard 4 mix. (default "b") set consoleImg=-console_img="mix3,b,s" rem Comma-separated order to prefer console sources, ss=screenscraper, ovgdb=OpenVGDB, gdb=theGamesDB (default "gdb") set consoleSrc=-console_src="ss" rem If true, convert videos for the Raspberry Pi (e.g. 320x240@30fps) NOTE: This needs ffmpeg installed set convertVideo=-convert_videos="true" rem If false, don't download any images, instead see if the expected file is stored locally already. (default true) set downloadImg=-download_images="true" rem If true, download marquees. set downloadMarquee=-download_marquees="false" rem If true, download videos. set downloadVideo=-download_videos="false" rem Comma-separated list of extensions to also include in the scraper. set extraExt=-extra_ext=".scummvm,.ipf,.mx1,.mx2,.exe,.ws,.wsc,.wad,.dsk,.tap,.trd,.tzx,.z80,.p,.a0,.crt,.nib,.do,.po" rem jpg or png, the format to write the images. (default "jpg") set imgFormat=-img_format="png" rem The path to use for images in gamelist.xml. (default "images") set imagePath=-image_path="./downloaded_images" rem The suffix added after rom name when creating image files. (default "-image") set imageSuffix=-image_suffix="-image" rem The order to choose for language if there is more than one for a value. (en, fr, es, de, pt) (default "en") set langSS=-lang="en,es,pt,de,fr" rem Comma-separated order to prefer images, s=snap, t=title, m=marquee, c=cabinet, b=boxart, 3b=3D-boxart, fly=flyer. (default "t,m,s,c") set mameImg=-mame_img="b,s,fly,m,t" rem Comma-separated order to prefer mame sources, ss=screenscraper, adb=arcadeitalia, mamedb=mamedb-mirror, gdb=theGamesDB-neogeo (default "adb,gdb") set mameSrc=-mame_src="ss" rem jpg or png, the format to write the marquees. (default "png") set marqueeFormat=-marquee_format="png" rem The path to use for marquees in gamelist.xml. (default "images") set marqueePath=-marquee_path="./downloaded_images" rem The suffix added after rom name when creating marquee files. (default "-marquee") set marqueeSuffix=-marquee_suffix="-marquee" rem The max height of images. Larger images will be resized. set maxHeight=-max_height=0 rem The max width of images. Larger images will be resized. (default 400) set maxWidth=-max_width=400 rem Don't add thumbnails to the gamelist. set noThumb=-no_thumb=true rem Download the thumbnail for both the image and thumb (faster). (default "false") set thumbOnly=-thumb_only=false rem Information will be attempted to be downloaded again but won't remove roms that are not scraped. set refreshXML=-refresh=false rem The order to choose for region if there is more than one for a value. xx is a special region that will choose any region. (default "us,wor,eu,jp,fr,xx") set regionSS=-region="us,wor,eu,jp,fr,xx" rem The `username` for registered ScreenScraper users. set username=-ss_user=%username% rem The `password` for registered ScreenScraper users. set password=-ss_password=%password% rem If true, use the filename minus the extension as the game title in xml. set useFilename=-use_filename=false rem Use the name in the No-Intro DB instead of the one in the GDB. (default true) set useNoIntroName=-use_nointro_name=true rem The path to use for videos in gamelist.xml. (default "images") set videoPath=-video_path="./downloaded_images" rem The suffix added after rom name when creating video files. (default "-video") set videoSuffix=-video_suffix="-video" rem Use N worker threads to process roms. (default 1) set workersN=-workers=4 rem Create dictionary rem Change the code page to Unicode/65001 chcp 65001 >nul rem Get OS's language if not "%lang%"=="auto" goto selectDictionary for /F "tokens=3" %%a in ('reg Query "HKCU\Control Panel\Desktop" /V PreferredUILanguages ^| find "PreferredUILanguages"') do set language=%%a set language=%language:~0,-3% :selectDictionary rem Select dictionary for %%a in (es de fr en) do ( if "%%a"=="%lang%" set language=%lang% ) if "%language%"=="es" goto es if "%language%"=="de" goto de if "%language%"=="fr" goto fr goto * :es set "dict=ERROR: Sin conexión a internet. Saliendo...;no es una plataforma soportada.;ERROR: Imposible descargar el scraper. Saliendo...;ERROR: Imposible descomprimir el scraper. Saliendo...;ERROR: Imposible comprobar actualizaciones en GitHub.;Actualizando sselph scraper de;a;, espere por favor...;Descargando sselph scraper;Abriendo Explorador de Carpetas...;Explorador de Carpetas para;aun no implementado, lo siento!;Carpeta de roms seleccionada:;No olvides detener EmulationStation antes de scrapear!;¿Qué sistema(s) desea scrapear? Escribe "all" para todos los sistemas o "cd" para abrir el navegador de carpetas.;Entrada incorrecta!;¿Deseas anexar los gamelists existentes? [Y/N]:;Scrapeando;en progreso. Espere por favor...;Inicio;Fin;Duración;Por favor, seleccione la carpeta de roms; Scrapeado finalizado!" & goto createDict :de set "dict=FEHLER: Keine Internetverbindung verfügbar. Beenden...;ist kein unterstütztes Betriebssystem.;FEHLER: Scraper konnte nicht heruntergeladet werden. Beenden...;FEHLER: Scraper konnte nicht entpackt werden. Beenden...;FEHLER: Suche nach Updates auf GitHub fehlgeschlagen.;Update sselph scraper von;auf; wird durchgeführt, bitte warten...;Download sselph scraper;Öffne Ordner Browser...;Ordner Browser für;noch nicht implementiert, entschuldige!;Ausgewählter roms Ordner:;Vergiss nicht EmulationStation vor dem Scrapen zu beenden!;Welche(s) System(e) möchtest du scrapen? Tippe "all" für alle Systeme oder "cd", um den Ordner Browser zu öffnen.;Ungültige Eingabe!;Möchtest du die bestehende gamelists erweitern? [Y/N]:;Scrapen;in Arbeit. Bitte warten...;Beginn;Ende;Dauer;Bitte wählen Sie den Ordner roms;Scrapen ist beendet!" & goto createDict :fr set "dict=ERREUR : Pas de connexion internet disponible. Quitter...;n'est pas une plateforme prise en charge.;ERREUR : Impossible de télécharger le scraper. Quitter...;ERREUR : Impossible de décompresser le scraper. Quitter...;ERREUR : Impossible de rechercher les mises à jour sur GitHub.;La mise à jour de sselph scraper de;à;, veuillez patienter...;Le téléchargement sselph scraper;Ouverture du Navigateur de Dossier...;Navigateur de Dossier pour;pas encore mis en oeuvre, désolé !;Dossier roms sélectionné :;N'oubliez pas d'arrêter de EmulationStation avant de scrapez !;Quel(s) système(s) souhaitez-vous scrapez ? Tapez « all » pour tous les systèmes ou « cd » pour ouvrir le dossier du navigateur.;Entrée incorrecte !;Vous souhaitez ajouter les gamelists ? [Y/N] :;Scrapez;en course. Veuillez patienter...;Démarrer;Terminer;Durée;Veuillez choisir le dossier de roms;Scrapez est terminé !" & goto createDict :* if not "%language%"=="en" echo Can't get OS's language. English will be used. set "dict=ERROR: No internet connection available. Exiting...;is not a supported platform.;ERROR: Unable to download the scraper. Exiting...;ERROR: Couldn't unzip the scraper. Exiting...;ERROR: Unable to check for updates on GitHub.;Updating sselph scraper from;to;, please wait...;Downloading sselph scraper;Opening Folder Browser...;Folder Browser for;not implemented yet, sorry!;Selected roms folder:;Don't forget to stop EmulationStation before scraping!;Which system(s) do you want to scrape? Type "all" for all systems or "cd" to open the folder browser.;Incorrect input!;Would you like to append existing gamelists? [Y/N]:;Scraping;in progress. Please wait...;Start;Finish;Duration;Please choose the roms folder;Scraping has finished!" :createDict set /A count=-1 call :parseDict "%dict%" :parseDict set /A count+=1 for /F "tokens=1* delims=;" %%i in ("%~1") do ( set dict[%count%]=%%i call :parseDict "%%j" ) rem Check internet connection ping 8.8.8.8 -n 1 -w 1000 >nul if errorlevel 1 echo %dict[0]% & pause >nul & exit rem Set default roms directory to launch directory set "romsDir=%cd%" :scraperEXE rem Detect OS architecture reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" | find /I "x86" >nul && set arch=386 || set arch=amd64 rem Query the API to get the latest tag set "Uri=https://api.github.com/repos/sselph/scraper/releases/latest" for /F "delims=" %%a in ('PowerShell Invoke-RestMethod -Method Get -Uri %Uri% ^| find /I "tag_name"') do ( for /F "tokens=3" %%b in ("%%a") do set scraperVersion=%%b ) rem Download or update scraper if needed if exist "scraper.exe" ( for /F "tokens=* usebackq" %%a in (`scraper.exe -version`) do ( if "%%a" GEQ "%scraperVersion%" goto systemSelection if "%scraperVersion%"=="" echo %dict[4]% & echo. & goto systemSelection echo %dict[5]% %%a %dict[6]% %scraperVersion%%dict[7]% & echo. ) ) else echo %dict[8]% %scraperVersion%%dict[7]% & echo. rem Build the file name, download url and download the file to the current location set scraperZip=scraper_windows_%arch%.zip set scraperURL=https://github.com/sselph/scraper/releases/download/%scraperVersion%/%scraperZip% PowerShell (New-Object System.Net.WebClient).DownloadFile('%scraperURL%', '%~dp0%scraperZip%') rem Unzip the scraper and remove unnecessary files if exist "%scraperZip%" ( PowerShell Expand-Archive -Path '%scraperZip%' -DestinationPath '.\' -Force del LICENSE.txt %scraperZip% ) else echo %dict[2]% & pause >nul & exit :systemSelection rem Select the system to scrape (type "all" to scrape all folders) setlocal EnableDelayedExpansion echo %dict[14]% set /P "system=" if "%system%"=="cd" goto SUB_folderBrowser if "%system%"=="" echo %dict[15]% & goto systemSelection if /I not "%system%"=="all" goto modeSelection set "system=" for /F "delims=" %%f in ('dir /B /A:D') do set system=!system! %%f :modeSelection rem Choose to append an existing (y) or create a new gamelist (n) if "%refreshXML%"=="-refresh=true" goto fullMode set /P "appendXML=%dict[16]% " if /I "%appendXML%"=="y" goto appendMode if /I "%appendXML%"=="n" goto fullMode echo %dict[15]% & goto modeSelection :appendMode set appendMode=-append & goto startTime :fullMode set "appendMode=" :startTime rem Save start time set startTime=%time% rem ******************** MAIN CODE SECTION for %%i in (%system%) do ( rem Check if mame device is selected and set corresponding flags set "arcade=" echo %%i | findstr /LIC:"arcade" >nul && set arcade=-mame %mameImg% %mameSrc% echo %%i | findstr /LIC:"fba" >nul && set arcade=-mame %mameImg% %mameSrc% echo %%i | findstr /LIC:"mame" >nul && set arcade=-mame %mameImg% %mameSrc% echo %%i | findstr /LIC:"neogeo" >nul && set arcade=-mame %mameImg% %mameSrc% rem If mame device, consoleImg not used if not "!arcade!"=="" set "consoleImg=" echo. title fastscraper ver. %releaseDate% - %dict[17]% %%i... rem Scraping roms echo %dict[17]% %%i %dict[18]% echo. "%~dp0scraper.exe" %appendMode% !arcade! -rom_dir="%%i" %imagePath% -image_dir="%%i\%imagePath:~15,-1%" %imageSuffix% %marqueePath% -marquee_dir="%%i\%marqueePath:~17,-1%" %marqueeSuffix% %videoPath% -video_dir="%%i\%videoPath:~15,-1%" %videoSuffix% %convertVideo% -output_file="%%i\gamelist.xml" -missing="%%i\_%%i_missing.txt" %addNotFound% !consoleImg! %consoleSrc% %downloadImg% %downloadMarquee% %downloadVideo% %extraExt% %imgFormat% %marqueeFormat% %langSS% %maxHeight% %maxWidth% %noThumb% %thumbOnly% %refreshXML% %regionSS% %username% %password% %useFilename% %useNoIntroName% %workersN% echo. ) rem ******************** END MAIN CODE SECTION setlocal DisableDelayedExpansion title fastscraper ver. %releaseDate% - %dict[23]% rem Save finish time set endTime=%time% rem Change formatting for the start and end times for /F "tokens=1-4 delims=:.," %%a in ("%startTime%") do ( set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" ) for /F "tokens=1-4 delims=:.," %%a in ("%endTime%") do ( set /A "end=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100" ) rem Calculate the duration by subtracting values set /A elapsed=end-start rem Correct if the measurement was in between days (8640000 centisec/day) if %end% lss %start% set /A elapsed=end-start+8640000 rem Format the results for output set /A hh=elapsed/(60*60*100), rest=elapsed%%(60*60*100), mm=rest/(60*100), rest%%=60*100, ss=rest/100, cc=rest%%100 if %hh% lss 10 set hh=0%hh% if %mm% lss 10 set mm=0%mm% if %ss% lss 10 set ss=0%ss% if %cc% lss 10 set cc=0%cc% set DURATION=%hh%:%mm%:%ss%,%cc% echo %dict[19]% : %startTime% echo %dict[20]% : %endTime% echo --------------- echo %dict[21]% : %DURATION% popd & pause >nul & exit :SUB_folderBrowser setlocal DisableDelayedExpansion echo. echo %dict[9]% rem PowerShell-Subroutine to open a Folder Browser set "psCommand="(New-Object -COM Shell.Application)^ .BrowseForFolder(0,'%dict[22]%.',0,0).self.path"" for /F "usebackq delims=" %%i in (`PowerShell %psCommand%`) do set "newRoot=%%i" set "romsDir=%newRoot%" cls & pushd "%romsDir%" & echo %dict[12]% %romsDir% rem Check if scraping from network drive and show warning about stopping ES if not x%romsDir:\\=%==x%romsDir% echo %dict[13]% echo. & goto systemSelection