Tool Install Any TModLoader Version From CMD

Hello Everyone! Recently after seeing a few of my friends struggling (Some how lol) to install TModLoader, I decided to make a batch script that automatically downloads, extracts, and installs any version of the mod loader right from a command prompt! All downloads are read/extracted straight from this website, not some 3rd party! In the eyes of most, this project is not very practical, however it was something fun I made and I hope some of you lesser tech-shabby people can benefit from this!

123.PNG


How Does It Work?
  1. Downloads The TModLoader HTML Document.
  2. Extracts the lines containing version & download link.
  3. Cleans the code to be easier to read.
  4. Sets variables based on the version number.
  5. Makes a printed GUI list for the user.
  6. Downloads selected version.
  7. Installs selected version.
  8. Cleans created files.
How To Use It?
  1. Copy the code from bellow
  2. Paste into a blank text document
  3. Click "Save-As" > Encoding > ANSI
  4. In "Save-As" Click "All-Files" > Name.bat
  5. Run your script! - Enjoy
Example:
1234.PNG


Code:
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::Install Any TModLoader Version Via Batch v2                ::
::Created by D.RUSS#2430 [http://russdev.mooo.com/]          ::
::My Stackoverflow [https://tinyurl.com/wl7bjza]             ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@ECHO OFF
@CD %TEMP%
@setlocal enabledelayedexpansion
@mode con:cols=120 lines=3000
@title TModLoader Installer (Batch Script)
call :Config
set "LoadMsg=Loading Scripts..."
call :Progress
goto GetScripts

:Config
set "Counter=-5"
set "CountN=5"
set "Schalter=2"
set "Width=0"
set "LoadMsg="
goto :EOF

:GetScripts

:: Get HTML Script
::
::::::::::::::::::::::
powershell -c "Invoke-RestMethod -Uri "https://forums.terraria.org/index.php?threads/1-3-tmodloader-a-modding-api.23726/" -OutFile output.txt"
call :Progress

:: Get Current Version
::
:::::::::::::::::::::: Remove Everything Before -- Steam/GoG:
for /f "delims=:" %%N in ('findstr /n Steam/GoG: output.txt') do if not defined N set /a N=%%N-1
more +%N% "output.txt" >"1.txt"
call :Progress
:::::::::::::::::::::: Remove Everything After First -- <br />
powershell -executionpolicy bypass -command "(Get-Content 1.txt -Raw) -replace '(?s)<br.*?>.+' | Set-Content 2.txt"
call :Progress
:::::::::::::::::::::: Remove Everything From Each Line After -- target
powershell -executionpolicy bypass -command "(Get-Content 2.txt -Raw) -replace 'target.*' | Set-Content 3.txt"
call :Progress
:::::::::::::::::::::: Replace " <a href=" To " "
powershell -executionpolicy bypass -command "(Get-Content 3.txt -Raw) -replace ' \<a href=', ' ' | Set-Content currentbuild.txt"
call :Progress

:: Remove Temp Files
if exist "1.txt" (del 1.txt)
if exist "2.txt" (del 2.txt)
if exist "3.txt" (del 3.txt)
call :Progress

:: Get Older Versions
::
:::::::::::::::::::::: Remove Everything Before -- bbCodeBlock-content">More
for /f "delims=:" %%M in ('findstr /n bbCodeBlock-content\^"\^>More output.txt') do if not defined M set /a M=%%M-1
more +%M% "output.txt" >"1.txt"
call :Progress
:::::::::::::::::::::: Remove First Line
powershell -executionpolicy bypass -command "Get-Content 1.txt | Select-Object -Skip 1 | Set-Content 2.txt"
call :Progress
:::::::::::::::::::::: Remove Everything After First -- </div>
powershell -executionpolicy bypass -command "(Get-Content 2.txt -Raw) -replace '(?s)</div>.+' | Set-Content 3.txt"
call :Progress
:::::::::::::::::::::: Remove Everything After Inbetween <div>
powershell -executionpolicy bypass -command "(Get-Content 3.txt -Raw) -replace '\<div.*?\>' | Set-Content 4.txt"
call :Progress
:::::::::::::::::::::: Remove Everything From Each Line After -- target
powershell -executionpolicy bypass -command "(Get-Content 4.txt -Raw) -replace 'target.*' | Set-Content 5.txt"
call :Progress
:::::::::::::::::::::: Replace " <a href=" To " "
powershell -executionpolicy bypass -command "(Get-Content 5.txt -Raw) -replace ' \<a href=', ' ' | Set-Content 6.txt"
call :Progress
:::::::::::::::::::::: Replace "<br />" To ""
powershell -executionpolicy bypass -command "(Get-Content 6.txt -Raw) -replace '\<br.*?\>', '' | Set-Content 7.txt"
call :Progress
:::::::::::::::::::::: Remove Everything After -- <a
powershell -executionpolicy bypass -command "(Get-Content 7.txt -Raw) -replace '\<a.*?5""' | Set-Content 8.txt"
call :Progress
:::::::::::::::::::::: Remove Empty Lines
powershell -executionpolicy bypass -command "(Get-Content 8.txt -Raw) -replace ('(?m)^\s*','').trim() | Set-Content oldversions.txt"
call :Progress

:::::::::::::::::::::: Combine Text Files
copy /b "currentbuild.txt"+"oldversions.txt" TLoadVersionsTEMP1.txt >nul
call :Progress
:::::::::::::::::::::: Remove Empty Lines In Text File
powershell -executionpolicy bypass -command "(Get-Content TLoadVersionsTEMP1.txt -Raw) -replace ('(?m)^\s*','').trim() | Set-Content TLoadVersionsTEMP2.txt"
call :Progress
:::::::::::::::::::::: Replace "<br />" To ""
powershell -executionpolicy bypass -command "(Get-Content TLoadVersionsTEMP2.txt -Raw) -replace 'Steam.*?GoG', 'Latest-Version' | Set-Content TLoadVersions.txt"
call :Progress

:: Remove Temp Files
::
::::::::::::::::::::::
if exist "1.txt" (del 1.txt)
if exist "2.txt" (del 2.txt)
if exist "3.txt" (del 3.txt)
if exist "4.txt" (del 4.txt)
if exist "5.txt" (del 5.txt)
if exist "6.txt" (del 6.txt)
if exist "7.txt" (del 7.txt)
if exist "8.txt" (del 8.txt)
call :Progress
if exist "output.txt" (del output.txt)
if exist "TLoadVersionsTEMP1.txt" (del TLoadVersionsTEMP1.txt)
if exist "TLoadVersionsTEMP2.txt" (del TLoadVersionsTEMP2.txt)
if exist "oldversions.txt" (del oldversions.txt)
if exist "currentbuild.txt" (del currentbuild.txt)
call :Progress
call :Config

goto MenuList

:MenuList
cls

Set "INPUT="
Set "i=0"

Echo Select A Tmodloader Version: (Scroll Down)
Echo(

Rem | Generate the list of items from textfile
FOR /F "tokens=1,* delims=: " %%A IN (TLoadVersions.txt) DO (

    Rem | Set Strings
    Set /A "i+=1"

    Rem | Save Variable As String
    Set "Num!i!=%%B"

    Rem | Print String To Console
    Echo [!i!] - %%A
    
)
Echo [0] - Exit

Echo(
Set /P INPUT=Type Your Choice And Press Enter: 
IF /I "!INPUT!"=="0" (

    Rem | Remove Temp Files
    if exist "TLoadVersions.txt" (del TLoadVersions.txt)
    
    GOTO :EOF

)

Rem | Check For Valid Listing
IF /I "!Num%INPUT%!"=="" (

    Rem | Number Not Listed!
    cls
    Echo ERROR: Number Was Not On The List.
    Echo(
    
    Pause
    goto MenuList

)
cls

Rem | Remove Temp Files
if exist "TLoadVersions.txt" (del TLoadVersions.txt)

Rem | Set String Based On Number
Set "INPUT=!Num%INPUT%!"

Rem | Remove Spaces From End Of String
for /l %%A in (1,1,100) do (if "!INPUT:~-1!"==" " set INPUT=!INPUT:~0,-1!)
Set "net_int=!INPUT!"
goto InstallMe

:InstallMe
set "LoadMsg=Installing..."
set "Counter=-25"
set "CountN=25"
call :Progress

:::::::::::::::::::::: Download File
powershell -c "Invoke-RestMethod -Uri !INPUT! -OutFile x.zip"
call :Progress
:::::::::::::::::::::: Extract File
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('x.zip', 'DownloadedFiles'); }"
call :Progress
:::::::::::::::::::::: Rename Needed Files
ren "%temp%\DownloadedFiles\Terraria.exe" "TerrariaModded.exe" >nul
call :Progress
:::::::::::::::::::::: Move Files
move /Y "%temp%\DownloadedFiles\*.*" "C:\Program Files (x86)\Steam\steamapps\common\Terraria" >nul
call :Progress

:: Remove Temp Files
::
::::::::::::::::::::::
if exist "x.zip" (del x.zip)
if exist "%temp%\DownloadedFiles" (rmdir /s /q "%temp%\DownloadedFiles")
goto Completed

:Completed
cls
Echo SUCCESS: The ModLoader Has Finished Installing.
Echo(

Pause
goto :EOF

:: Progress Bar Function
::
::::::::::::::::::::::
:Progress
set /a Counter=%Counter% + !CountN!
set /a Display=%Counter% / 2
FOR /L %%A IN (1,1,%Display%) DO (
    set Display=!Display!²
)
cls
if %Counter% gtr 100 (Set /a "Counter=100")
echo            !LoadMsg!                  %Counter%%%
echo     ²!Display:~2,47!
echo(
goto :EOF

Disclaimers:
  • Due to the owner of TModLoader's thread, For Versions 0.8.3.4 and bellow will NOT work with this menu as the owner is still using Mediafire Links. Maybe shoot him an PM and ask to polity upload/update those links on his thread! All version after 0.8.3.4 he is uploading to his official GitHub so those will work! (As long as he updates his thread!)
  • This program only uses official forums.terraria links when loading it's scripts. No 3rd party programs or links are used!
  • This program was intented for the good of its users "As Is". I'm not responsible for the edits by you or others who give it out.
  • This program may not work on earlier versions of windows! If it does not work for you, consider updating your machine and or installing it's respected updates!
 

Attachments

  • Install-TModLoader.zip
    2.2 KB · Views: 57
Last edited:
I'd reccomend pulling your data from the github releases page (tModLoader/tModLoader) rather than the forum thread, as it's less likely to be broken by formatting changes in the tModloader thread.
 
I'd reccomend pulling your data from the github releases page (tModLoader/tModLoader) rather than the forum thread, as it's less likely to be broken by formatting changes in the tModloader thread.

I would love to do that but I don't know how lenient the moderators are on this site. Most sites don't allow external links what so ever. This is why I created the script to use only verified links via an existing and moderated thread from this site. The code should be pretty versatile for future updates on his/her thread. If it breaks I will be happy to fix this script.
 
I would love to do that but I don't know how lenient the moderators are on this site. Most sites don't allow external links what so ever. This is why I created the script to use only verified links via an existing and moderated thread from this site. The code should be pretty versatile for future updates on his/her thread. If it breaks I will be happy to fix this script.
If you're ever in doubt, feel free to shoot one of us a message - in general, external links are fine as long as they aren't malicious and are relevant to the post.
 
Back
Top Bottom