Guide / Tutorial Multiple accounts made easier on PC using EliteDAlt.bat

I made a batch script to facilitate setting up and running alternate accounts on the same computer, minimize the space they take up and quickly synchronize them after an update or a patch.
With Odyssey update 13 I was able to verify that it still works nicely for me and I want to share it with fellow Elite: Dangerous enthusiasts. The name EliteDAlt.bat is in the thread title to make it easier to find if the thread gets buried.

Edit: If you are not interested in running multiple accounts concurrently on the same computer, then his is definitively simpler:
The simplest way that I have found to use altCMDRs (bought from the Frontier store) is to create individual copies of the launcher, with unique names, in the same directory and log in to each separately (as each discrete copy of the launcher "remembers" its own login data).

Note:
You still need individual e-mail addresses for each account (this requirement kept me from having an alt for a long time) and to be able to register them individually with Frontier.
I started out with a main account on Steam and recently purchased full alt accounts on Frontier's web store. The second account I purchased earlier on Steam when Odyssey was released is useless for now. EliteDAlt.bat should work without issues if the original account was installed using Frontier Developments installer, but users with Epic accounts might face some difficulties.

I put some extensive description and information in comment texts in the batch script, which is included in clear text as code in the spoiler tag. Use notepad or your favorite code editor with syntax highlighting to read it or adapt it if you have specific needs.

Code:
:: Purpose: create and sync multiple installations for alternate accounts for Elite:Dangerous
:: Created: 2022-06-20, forum user badibeat
:: Changed: 2022-08-26, forum user badibeat
::    Added file .script.py that came with update 13 (or Steam), updated instructions
::    Create an error in the output when a directory symbolic link should be created but a
::    File or directory already exists. (This script will not replace the dir by itself.)
::    Suppress standard output of copy and xcopy (helps spotting errors).
::
:: Disclaimer: This script was tested on a Steam account with alt accounts purchased on
:: Frontier Development's store.
:: The author makes no guarantees and takes no responsibiliy for the use of this script.
::
:: For simplicity, this windows batch script has to be executed in the parent directory
:: (folder) of the "Elite Dangerous" installation directory, one up from the the one that
:: contains EDLaunch.exe
::
:: Make sure neither a copy of the games nor a launcher are running before executing
:: this script, or there might be errors and some files missing.
::
:: This script requires that the directories for alternate accounts reside in the same location
:: (parent directory) as "Elite Dangerous" but are named with some characters appended to that
:: original name.
::
:: This directory setup makes sure all assets reside on the same filesystem.
:: The alternate installations only take up a negligible amount of disk space compared
:: to the original installation when using this script.
:: The result allows to efficiently reuse the same assets multiple between accounts, even
:: if running them concurrently on the same machine.
::
:: To add an alternate account just add an empty directory (folder) with a matching name to the
:: base directory, then run the script in the starting dir as Administrator.
::
:: Some valid examples for directory names of alternate accounts (use without the double quotes):
:: "Elite Dangerous Alt", "Elite Dangerous2", "Elite Dangerous - Copy 7", "Elite Dangerous Alt 2"
::
:: After an update or patch for the Game it is recommended to launch it with the original launcher,
:: then re-run this script to sync the files to the alt directories.
::
:: For easy launching a shortcut to each of the EDLaunch.exe files can be created, individually
:: renamed and moved to a convenient place.
::
:: Important Note: On Windows 10 this batch file has to be run with elevation
:: (as an Administrator) in the initial run or whenever a new alternate account
:: is added to create directory symbolic links and hard links.
:: In newer Windows versions elevation may no longer be required.
::
:: This batch script creates folders, directory symbolic links, a couple of hard links
:: and copies files to do its job.
:: I refrained from using junctions, as they are not safe. When moving a junction,
:: the original content gets moved into the destination which becomes a directory and
:: removed from the original location. In contrast, deleting symbolic links and hard links
:: is safe.

:: Some settings files are copied at the beginning but not overwritten in subsequent syncs.
:: It is relatively safe to delete an entire alt directory and re-create it or empty it competely,
:: as only some basic graphic settings are stored there.
:: You may want to preserve the following files:
::    "Products\elite-dangerous-64\AppConfig.xml"
::    "Products\elite-dangerous-64\GraphicsConfiguration.xml"
::    "Products\elite-dangerous-odyssey-64\AppConfig.xml"
::    "Products\elite-dangerous-odyssey-64\GraphicsConfiguration.xml"

:: This batch script uses pre-defined lists of files and directories in the body of the text.
:: If new files or directories are included with future updates, then the launcher will simply
:: take care of the missing ones. Likewise, the script does not copy files or directories which
:: are not part of the original installation. However, it is easy to change this configuration
:: which starts after ':: Here we go:'

:: Also note that NTFS symbolic links and junctions, though they appear
:: like shortcuts in Windows Explorer, cannot be created like them.
:: Similar for hard links, but they are not distinguished from normal files.
::
:: All three are features of the NTFS filesystem and may not work if the starting directory
:: resides on a different type of filesystem.



@echo off

:: We set variables inside code blocks for use outside, therefore they have to be exported.
endlocal
:: Delayed expansion is required for counting in loops and to access array variables
:: Extensions are required for pushd, the for loop, some if comparisons and arithmetic expressions with set /a.
setlocal enableDelayedExpansion enableExtensions
:: switch to the original starting directory when run as administrator, and allow to popd back later
pushd %~dp0
set ENDERROR=0

echo ------------------------------------------------------------------------------
echo     Creating and synchronising alternate installations for Elite:Dangerous
echo ------------------------------------------------------------------------------
echo Starting directory is "%CD%".


:: First preparation step:
:: Collect the matching files (directories) found directly underneath the starting directory in a for loop.
:: The file names, full paths and file attributes are collected into arrays.

set FILECOUNT=0
:: Use %%F in batch and %F in command ...
:: for /d iterates only through directories.

for /d %%F in ("Elite Dangerous*") do (
set "FNM[!FILECOUNT!]=%%F"
set "FATT[!FILECOUNT!]=%%~aF"
set "FPATH[!FILECOUNT!]=%%~fF"
set /a FILECOUNT += 1
)


:: Second preparation step:
:: In a first iteration we collect only valid alt directories and check if the
:: original directory is valid.
:: The collection is stored in the lookup table ALTPOINT[] to address the
:: original arrays indirectly.
:: The iteration goes through the arrays using goto and labels.
:: I couldn't get some functions to work inside the for loop.

set ORIGFOUND=0
set ORIGISDIR=0
set ALTCOUNT=0
set INDEX=0

:COUNTSTART
if not %FILECOUNT% GTR %INDEX% goto COUNTEND
set "FILE_ATTRIBUTE=!FATT[%INDEX%]!"
set "FILE_NAME=!FNM[%INDEX%]!"
:: pick the first character of attributes which is a "d" for directories.
set FILE_ATTRIBUTE=%FILE_ATTRIBUTE:~0,1%
if "%FILE_ATTRIBUTE%"=="d" (
    set ORIG=1
    set ALT=1
    ) else (
    set ORIG=0
    set ALT=0
)
:: compare if the file name matches "Elite Dangerous", ignoring case.
if /i "%FILE_NAME%"=="Elite Dangerous" (
    set ALT=0
    set ORIGFOUND=1
    ) else ( set ORIG=0 )
if "%ORIG%"=="1" (
    set ORIGISDIR=1
    set ORIGINDEX=%INDEX%
    )
if "%ALT%"=="1" (
    set "ALTPOINT[%ALTCOUNT%]=%INDEX%"
    set /a ALTCOUNT += 1
)
set /a INDEX += 1
goto COUNTSTART
:COUNTEND

:: Third preparation step:
:: Execute some error checks from the collected data before starting

if not %ORIGFOUND%==1 (
echo ERROR: No directory "Elite Dangerous" found in the start directory
echo "%CD%".
echo.
echo This batch file has to be executed in the parent directory of the Elite Dangerous
echo installation directory. The latter is named "Elite Dangerous" and contains EDLaunch.exe.
echo.
echo Move or copy the batch file into that parent directory and run it with elevation
echo ^(as administrator^).
echo You can for convenience create a shortcut of the batch file and move the shortcut
echo to the same location as the shortcut for the individual launchers EDLaunch.exe.
echo To run it as administrator each time open the batch shortcut's properties and in
echo tab "Shortcut" click "Advanced..."  and enable "run as administrator".
echo.
set ENDERROR=1
goto END
)

if not %ORIGISDIR%==1 (
echo ERROR: "Elite Dangerous" found in the start directory but is not a directory.
echo Start directory: "%CD%".
echo.
set ENDERROR=2
goto END
)

if not exist "Elite Dangerous/EDLaunch.exe" (
echo ERROR: No EDLaunch.exe found in the "Elite Dangerous" directory.
echo Start directory: "%CD%".
echo.
set ENDERROR=3
goto END
)

if %ALTCOUNT%==0 (
echo ERROR: No alternate directories found in the same directory as "Elite Dangerous".
echo To add alternate directories with launchers simply create a new, empty directory
echo having a name that starts with but is different from "Elite Dangerous", then run
echo this batch script.
echo Start directory: "%CD%".
echo.
set ENDERROR=4
goto END
)

:: Main process:
:: Iterate through each of the alternate directories and set them up or sync them in turn.

:: Before the iteration starts:
:: Lookup the original full path and store it in SOURCEPATH
:: Initialize iteration variable(s)
set "SOURCEPATH=!FPATH[%ORIGINDEX%]!"
echo Fully qualified path of origin: "%SOURCEPATH%"
echo ------------------------------------------------------------------------------
set ALTINDEX=0

:: From here we set up each alternate directory in turn.
:: Lookup the current alternate's full path and store it in DESTPAH
:SETUPSTART
if not %ALTCOUNT% GTR %ALTINDEX% goto SETUPEND
:: The original arrays are indirectly addressed using lookup table ALTPOINT[]
set "INDEX=!ALTPOINT[%ALTINDEX%]!"
set "DESTDIR=!FNM[%INDEX%]!"
set "DESTPATH=!FPATH[%INDEX%]!"
echo.
echo.
echo ------------------------------------------------------------------------------
echo Processing directory "%DESTDIR%"
echo Fully qualified path "%DESTPATH%"
echo ------------------------------------------------------------------------------



:: --------------------------------------------------------------------------------
:: Here we go:
:: --------------------------------------------------------------------------------

:: 1) First we need to create some specific directories that cannot be linked as a whole
:: and need not be copied as a whole, but contain directories or files
:: some of which have the same content between instances and some of which need to differ.
:: You can ignore error "A subdirectory or file ... already exists." if this has run before.

:: It's a simple copy paste setup using a function to avoid the limitations of 'for'

call :DIR_CREATE "logs"
call :DIR_CREATE "Products"
call :DIR_CREATE "Products\elite-dangerous-64"
call :DIR_CREATE "Products\elite-dangerous-64\Logs"
:: call :DIR_CREATE "Products\elite-dangerous-64\Win64"
call :DIR_CREATE "Products\elite-dangerous-odyssey-64"
call :DIR_CREATE "Products\elite-dangerous-odyssey-64\Logs"
:: call :DIR_CREATE "Products\elite-dangerous-odyssey-64\Win64"


:: 2) Then we copy a few configuration files which are not to be overwritten if they already exist.

call :FILE_CREATE "Products\elite-dangerous-64\AppConfig.xml"
call :FILE_CREATE "Products\elite-dangerous-64\GraphicsConfiguration.xml"
call :FILE_CREATE "Products\elite-dangerous-odyssey-64\AppConfig.xml"
call :FILE_CREATE "Products\elite-dangerous-odyssey-64\GraphicsConfiguration.xml"

:: 3) Then copy directories which should not be replaced by directory symbolic links, and include their content

call :DIR_REPLACE "Products\elite-dangerous-64\ControlSchemes"
call :DIR_REPLACE "Products\elite-dangerous-odyssey-64\ControlSchemes"

:: 4) Create directory symbolic links for the remaining directories.
:: Alternatively it would be possible to create directory junctions
:: using the /J instead of the /D switch in the function.
:: Symbolic links require elevation to create, directory junctions only
:: access to the filesystem and are probably more efficient.
:: However, directory junctions are messy on Windows 10 as moving one
:: will empty the original directory and move the content to the newly
:: created directory.

call :DIR_SYMLINK "_CommonRedist"
call :DIR_SYMLINK "de"
call :DIR_SYMLINK "directx_redist"
:: call :DIR_SYMLINK "EmptySteamDepot"
call :DIR_SYMLINK "es"
call :DIR_SYMLINK "fr"
call :DIR_SYMLINK "pt-BR"
call :DIR_SYMLINK "ru"
call :DIR_SYMLINK "Products\COMBAT_TUTORIAL_DEMO"
call :DIR_SYMLINK "Products\elite-dangerous-64\Movies"
call :DIR_SYMLINK "Products\elite-dangerous-64\Openvr"
call :DIR_SYMLINK "Products\elite-dangerous-64\OptionDefaults"
call :DIR_SYMLINK "Products\elite-dangerous-64\PlanetShaders"
call :DIR_SYMLINK "Products\elite-dangerous-64\Win64"
call :DIR_SYMLINK "Products\elite-dangerous-odyssey-64\Movies"
call :DIR_SYMLINK "Products\elite-dangerous-odyssey-64\Openvr"
call :DIR_SYMLINK "Products\elite-dangerous-odyssey-64\OptionDefaults"
call :DIR_SYMLINK "Products\elite-dangerous-odyssey-64\PlanetShaders"
call :DIR_SYMLINK "Products\elite-dangerous-odyssey-64\Win64"

:: 5-6) Copy individual files.
:: Use call :FILE_REPLACE <relative path> to replace them with a copy from the original
::    on each execution of this batch script.
:: Use call :FILE_CREATE  <relative path> to copy from the original only if they are
::    not already present and let the launcher update the file for each instance
::    if required. This is recommended for individual configuration files, some of
::    which are already moved to an earlier section.
:: Use call :HARDLINK  <relative path> to create a hard link if the file does not already exist.
::    Files can be deleted prior to execution to create a new hard link. Hard links do
::    not require disk space and are updated from the original and will update the original
::    when written, therefore they are always in sync.

:: 5) Hard Link some large individual files.

:: Originally I used hard links for all files, as this is the most efficient way and
:: together with directory symbolic links eliminates the need to sync all alternates after
:: each update.
:: However, while the game launched normally, it gave me an error message when trying
:: to connect to the servers.
:: In order not to waste code and disk space this batch still uses hard links for the biggest
:: files, which in my tests still allowed me to run two accounts concurrently on the same machine.

call :HARDLINK "Products\elite-dangerous-64\EliteDangerous64.exe"
call :HARDLINK "Products\elite-dangerous-odyssey-64\EliteDangerous64.exe"

:: 6) Copy the bulk of the individual files with replace
:: After an update or patch for the Game it is recommended to launch it with the original launcher,
:: then re-run this script to sync the files to the alt directories.

call :FILE_REPLACE ".script.py"
call :FILE_REPLACE "CBViewModel.dll"
call :FILE_REPLACE "ClientSupport.dll"
call :FILE_REPLACE "CrashReporter.exe"
call :FILE_REPLACE "CrashReporter.exe.config"
call :FILE_REPLACE "EDLaunch.exe"
call :FILE_REPLACE "EDLaunch.exe.config"
call :FILE_REPLACE "EosIF.dll"
call :FILE_REPLACE "EosSdk.dll"
call :FILE_REPLACE "FilePackage.dll"
call :FILE_REPLACE "FORCServerSupport.dll"
call :FILE_REPLACE "FrontierSupport.dll"
call :FILE_REPLACE "HardwareReporter.exe"
call :FILE_REPLACE "HardwareReporter.exe.config"
call :FILE_REPLACE "LocalResources.dll"
call :FILE_REPLACE "MachineIdentifier.exe"
call :FILE_REPLACE "steam_api64.dll"
call :FILE_REPLACE "SteamIF.dll"
call :FILE_REPLACE "USS.exe"
call :FILE_REPLACE "WatchDog.exe"
call :FILE_REPLACE "WatchDog64.exe"

call :FILE_REPLACE "Products\elite-dangerous-64\AudioConfiguration.xml"
call :FILE_REPLACE "Products\elite-dangerous-64\DeviceDefaults.xml"
call :FILE_REPLACE "Products\elite-dangerous-64\dsfVorbisDecoder64.dll"
call :FILE_REPLACE "Products\elite-dangerous-64\EliteDangerous64.exe.watchdog.log"
call :FILE_REPLACE "Products\elite-dangerous-64\EOSSDK-Win64-Shipping.dll"
call :FILE_REPLACE "Products\elite-dangerous-64\GpuWorkTable.xml"
call :FILE_REPLACE "Products\elite-dangerous-64\InstallerInfo.txt"
call :FILE_REPLACE "Products\elite-dangerous-64\portaudio_x64.dll"
call :FILE_REPLACE "Products\elite-dangerous-64\Update.log"
call :FILE_REPLACE "Products\elite-dangerous-64\VersionInfo.txt"
call :FILE_REPLACE "Products\elite-dangerous-64\vp8decoder64.dll"
call :FILE_REPLACE "Products\elite-dangerous-64\webmsplit64.dll"

call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\AudioConfiguration.xml"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\DeviceDefaults.xml"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\dsfVorbisDecoder.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\dsfVorbisDecoder64.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\EliteDangerous64.exe.watchdog.log"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\EOSSDK-Win64-Shipping.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\GpuWorkTable.xml"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\htom32.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\htom64.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\InstallerInfo.txt"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\nvToolsExt32_1.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\OodleDictionary4.bin"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\portaudio_x64.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\portaudio_x86.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\Update.log"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\VersionInfo.txt"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\vp8decoder.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\vp8decoder64.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\vp9decoder.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\vp9decoder64.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\webmsplit.dll"
call :FILE_REPLACE "Products\elite-dangerous-odyssey-64\webmsplit64.dll"

:: Directories that need to be copied and are not symlinked:
:: "Products\elite-dangerous-64\ControlSchemes"
:: "Products\elite-dangerous-odyssey-64\ControlSchemes"
:: If these directories are symlinked then controls remain empty.

:: Files that need to be copied and are not hardlinked:
:: "Products\elite-dangerous-64\AppConfig.xml"
:: "Products\elite-dangerous-64\GraphicsConfiguration.xml"
:: "Products\elite-dangerous-odyssey-64\AppConfig.xml"
:: "Products\elite-dangerous-odyssey-64\GraphicsConfiguration.xml"

:: :: Files that are re-built but are hardlinked (you may delete them):
:: :: "Products\elite-dangerous-64\GpuWorkTable.xml"
:: :: "Products\elite-dangerous-64\InstallerInfo.txt"
:: :: "Products\elite-dangerous-odyssey-64\GpuWorkTable.xml"
:: :: "Products\elite-dangerous-odyssey-64\InstallerInfo.txt"
::
:: :: Files that could be set per instance but are normally not used or the same
:: :: across instances and therefore hardlinked:
:: :: "Products\elite-dangerous-64\AudioConfiguration.xml"
:: :: "Products\elite-dangerous-odyssey-64\AudioConfiguration.xml"



:: end of the main iteration
set /a ALTINDEX += 1
goto SETUPSTART
:SETUPEND

echo.
echo Looks like we're done.

:END
pause
:: exit the batch but not the shell and set ERRORLEVEL
exit /B %ENDERROR%


:: Here start the definitions of the functions used in the script

:: create a directory unless a directory or file already exists or the original does not exist.
:DIR_CREATE
if not exist "%SOURCEPATH%\%~1" exit /B 0
if not exist "%DESTPATH%\%~1" mkdir "%DESTPATH%\%~1"
exit /B 0

:: create a directory unless a directory or file already exists or the original does not exist.
:: then overwrite the content.
:DIR_REPLACE
:: creating the directory first prevents confusing prompts if the source directory is empty.
if not exist "%SOURCEPATH%\%~1" exit /B 0
if not exist "%DESTPATH%\%~1" mkdir "%DESTPATH%\%~1"
xcopy /E /Y /I /C /Q "%SOURCEPATH%\%~1" "%DESTPATH%\%~1" 1>nul
exit /B 0

:: create a directory symbolic link unless a directory or file (or symlink) already exists
:: or unless the original does not exist.
:: Report an error if it already exists but is not a reparse point (link), as the script
:: does not replpace existing files or directories with symbolic links.
:DIR_SYMLINK
if not exist "%SOURCEPATH%\%~1" exit /B 0
if not exist "%DESTPATH%\%~1" mklink /D "%DESTPATH%\%~1" "%SOURCEPATH%\%~1" && exit /B 0
fsutil reparsepoint query "%DESTPATH%\%~1" >nul || echo ERROR: Path is not a symbolic link "%DESTPATH%\%~1" || exit /B 1
exit /B 0

:: create an individual file unless it already exists or the original does not exist.
:FILE_CREATE
if not exist "%SOURCEPATH%\%~1" exit /B 0
if not exist "%DESTPATH%\%~1" copy /B "%SOURCEPATH%\%~1" "%DESTPATH%\%~1" 1>nul
exit /B 0

:: create or replace an individual file unless the original does not exiist
:FILE_REPLACE
if not exist "%SOURCEPATH%\%~1" exit /B 0
copy /B "%SOURCEPATH%\%~1" "%DESTPATH%\%~1" 1>nul
exit /B 0

:: create a hard link to a file if it does not already exist, unless the original does not exist.
:HARDLINK
if not exist "%SOURCEPATH%\%~1" exit /B 0
if not exist "%DESTPATH%\%~1" mklink /H "%DESTPATH%\%~1" "%SOURCEPATH%\%~1"
exit /B 0

How to get EliteDAlt.bat:

I have attached the script to this post in a zip archive, but in case this does not work here's how to get it from the spoiler tag:
  1. Copy the whole code text from the spoiler in this post
  2. Open notepad (Windows start menu, search for notepad)
  3. Paste the code text into notepad
  4. Use Menu > Save As... or Ctrl+Shift+S in Notepad
  5. In the Save As dialog change Save as type from "Text documents (.txt)" to "All Fiies (.*)"
  6. In the File Name field type EliteDAlt.bat
  7. I recommend to select encoding UTF-8 (without these pesky BOM), which should be the standard as of 2022.
  8. Here you may already navigate to the directory where the batch file should be at the end.
  9. Press the Save button.

How to use EliteDAlt.bat:
  1. Locate your "Elite Dangerous" installation directory (folder), the one that contains EDLaunch.exe.
  2. Navigate one directory up
  3. Once there create an empty directory for each alternate account alongside the original "Elite Dangerous" named with some additional text APPENDED to the original name, like "Elite Dangerous Alt" or "Elite DangerousXplore".
  4. Copy EliteDAlt.bat into the same directory (alongside "Elite Dangerous" and the alt folders). To make an EliteDAlt.bat file create a new text file there, open it, copy the code from the spoiler, paste it into the text editor (notepad by default) and save the text file
  5. Make sure neither the launcher nor the game are running
  6. Right click EliteDAlt.bat from the current location and select "Run as an Administrator" to execute it with elevation.
  7. This will fill the alt directories with symbolic linked, hard linked and copied files and directories. They currently take up 244Mbyte per alt, compared to the 153Gbyte of the original installation.
  8. You can now start any account by executing its launcher.

This is what it looks like on my computer:
Elite Dangerous & EliteDAlt.bat.png


When a new update or patch arrives then I recommend to launch the original installation first (usually the launcher is enough, but because Odyssey update 13 included a new launcher I had to do the update in Steam), Launch the game, exit both game and launcher and then re-run EliteDAlt.bat from the parent directory.

I keep shortcuts to all launchers and EliteDAlt.bat in a convenient location. Make sure to create the shortcuts in the directory of the original file (right click EDLaunch.exe / EliteDAlt.bat and choose "Create shortcut"), rename them and move them to the destination so the Target and Start in paths are correct. Only for EliteDAlt.bat you should enable the Run as administrator tick in the advanced properties of the shortcut.
Here's a picture with my shortcuts:
EliteDangerous shortcuts.png
 

Attachments

  • EliteDAlt.zip
    5.7 KB · Views: 113
Last edited:
This is a second post that I can keep almost on top and edit without inflating the top post too much.
I probably got notoriety already for editing my posts.

A personal note: I'd love to see a client that runs natively on the new Mac hardware and would be happy to provide a similar script for running multiple accounts.

Multiple accounts can be run concurrently on the same computer after setting them up using EliteDAlt.bat. Just close the launcher before starting a new one.

I found helpful information in the following threads:
 
Last edited:
This is my method for a Frontier account:

To run two accounts from the same PC, with one install, you just need to symlink a new folder to the Elite Dangerous game folder..

1661616852179.png


Buddy (second account) is symlink to Elite here

Then run EDLaunch.exe in the Buddy folder and enter your second account details.

%localappdata%\Frontier_Developments has a folder in it for each install, and saves your login info on a per launch folder basis.

This is a practially a zero overhead method.
Rob
 

Robert Maynard

Volunteer Moderator
The simplest way that I have found to use altCMDRs (bought from the Frontier store) is to create individual copies of the launcher, with unique names, in the same directory and log in to each separately (as each discrete copy of the launcher "remembers" its own login data).

Regarding e-mail addresses, the store accepts gmail "aliases", i.e. "user+CMDR#1@gmail.com", "user+CMDR#2@gmail.com" and "user+CMDR#3@gmail.com" are unique for the store but mail sent to them all ends up in the inbox of "user@gmail.com".
 
I have too many accounts and I don't need to have multiple directories or loads of gigabytes duplicated. Just copy the EDLaunch.exe file, rename the file to a descriptive name (I use that account commander name), create a shortcut for that, move the shortcut to the desktop, repeat for each account.

All you have to do to play your selected commander is run that commander shortcut from the desktop - the first time for each you have to log in and validate but only that first time. Obviously you have to go through the procedure each time the game needs a new launcher.

So for me, it is an additional 3,870KB per commander (the size of the exe file) - not 91GB.

aha - beaten to the punch there by Mr Maynard ... lol
 
Last edited:
The simplest way that I have found to use altCMDRs (bought from the Frontier store) is to create individual copies of the launcher, with unique names, in the same directory and log in to each separately (as each discrete copy of the launcher "remembers" its own login data).
That's indeed simpler. I could advocate that my script still allows to have some individual settings per account.
Regarding e-mail addresses, the store accepts gmail "aliases", i.e. "user+CMDR#1@gmail.com", "user+CMDR#2@gmail.com" and "user+CMDR#3@gmail.com" are unique for the store but mail sent to them all ends up in the inbox of "user@gmail.com".
That's what i coudln't do with my e-mail providers, and I don't want a gmail account. I used the server I set up for my wife which allowed me to create aliases.
 
I have too many accounts and I don't need to have multiple directories or loads of megabytes duplicated. Just copy the EDLaunch.exe file, rename the file to a descriptive name (I use that account commander name), create a shortcut for that, move the shortcut to the desktop, repeat for each account.

All you have to do to play your selected commander is run that commander shortcut from the desktop - the first time for each you have to log in and validate but only that first time. Obviously you have to go through the procedure each time the game neds a new launcher.

So for me, it is an additional 3,870KB per commander (the size of the exe file) - not 91GB.

beaten to the punch there me Robert ... lol
I get it, but for me is a mere 244Mbyte added per account.
 
The simplest way that I have found to use altCMDRs (bought from the Frontier store) is to create individual copies of the launcher, with unique names, in the same directory and log in to each separately (as each discrete copy of the launcher "remembers" its own login data).

Regarding e-mail addresses, the store accepts gmail "aliases", i.e. "user+CMDR#1@gmail.com", "user+CMDR#2@gmail.com" and "user+CMDR#3@gmail.com" are unique for the store but mail sent to them all ends up in the inbox of "user@gmail.com".
I have one question:
You didn't run into any issues running two accounts concurrently with this setup? If not, then my script looks a bit ridiculous ; )
 
I have one question:
You didn't run into any issues running two accounts concurrently with this setup? If not, then my script looks a bit ridiculous ; )

Just out of curiosity I decided to try running a second commander (after closing the first one's launcher) and it wouldn't run. Just left with the big blue play button unresponsive.

I can't think of a reason that I'd want to run two instances on the one PC, that's what the secondary PC and laptop are for. ;)

P.S. Apologies for mis-reading your OP earlier.

P.P.S. Just for completeness I ran two versions at the same time on the main PC (one Steam and one regular) and they of course co-existed quite happily since they are separate installations.
 
Just out of curiosity I decided to try running a second commander (after closing the first one's launcher) and it wouldn't run. Just left with the big blue play button unresponsive.

I can't think of a reason that I'd want to run two instances on the one PC, that's what the secondary PC and laptop are for. ;)

P.S. Apologies for mis-reading your OP earlier.

P.P.S. Just for completeness I ran two versions at the same time on the main PC (one Steam and one regular) and they of course co-existed quite happily since they are separate installations.
Thank you for looking closer into it and posting back. I was maybe not clear enough in my original post, as I put my findings in the script's comments.
I really wanted to be able to run two accounts concurrently. It's got to be on the same machine, because 1 hotas, 1 Windows with capital W and Intel. My next computer will be Apple silicon based.
 
Last edited:
Use the symlink method for another commander.

The way frontier distinguish between accounts is by the folder the EDLaunch appears in.. and if you symlinked it, it will appear in another folder. Then it looks at the %appdatalocal%\frontier_developement folder and finds the login details based on the launch folder.

You don't need to copy anything. You don't need another EDLaunch copy. You just need to symlink another folder to the main game folder.
1661623740306.png


then run EDLaunch in AnotherCommander and it will ask you to login and save your details for that launch folder.
 
Last edited:
Please write down the adress from the symlink. I think thats when people will understand (including me, still not gettin it fully)
 
Not tried that ..

As regards to the other question, you just set up a directory symlink (can be anywhere on the same drive) to your Elite game folder with edlaunch in it, as I did in the screenshot
 
I still use the multiple-windows-accounts with junctions (aka symlink) thingy to multibox (post). I have 1 Steam, 1 Epic and 2 Frontier accounts, so I have 3 types of startup.
 
I still use the multiple-windows-accounts with junctions (aka symlink) thingy to multibox (post). I have 1 Steam, 1 Epic and 2 Frontier accounts, so I have 3 types of startup.
I've previously read your post with interest and it helped me to make my script.
I don't have an Epic account (gave the free game a pass) and wanted to make the setup very easy, so I did not include an option for a second starting directory.
My batch file creates directory symbolic links (one type of junction), hard links and copies files and folders to further cut down on the used disk space.
 
Hi all.

Very timely topic as I've been wanting to have an alt as permanent resident of the noob system to hopefully answer questions and offer help to new cmdrs.

I have a Steam account and understand I would need to buy an alt directly from FDev, no issues there. My main concern with multiple accounts is, what happens to the logs which are written to a common folder? How would EDMC separate data from one cmdr and the other?

The above issue can be avoided using the multiple Windows users setup but, are there any easy ways of having separate logs using the symlink/launcher copy method?
 
Top Bottom