Optimizations for improving speed
Optimize for Speed of Launch for Cmd.exe sessions.
-
Removed duplicate path entry prevention, aka
enhance_pathfunctionality from%cmder_root%\vendor\init.bat. -
%cmder_root%\vendor\init.batis now a run once thing that generates%cmder_root%\config\user_init.cmd. -
%cmder_root%\config\user_init.cmd:-
Is generated from a template,
%cmder_root%\vendor\user_init.cmd.template, if it does not exist.- Is owned by the end user to edit however necessary.
- Can be re-generated by:
-
Deleting the current output file and starting a new
cmd::Cmdersession. -
Running a powershell script:

-
-
Is 3+ times faster than the current
masterbranch%cmder_root%\vendor\init.bat -
Is esentially hardcoded version of
init.batthat does everythinginit.batdoes minus autodiscovery of MOST config.- It still recursively updates the
pathif/max_depthcommand line arg is greater than 1.
- It still recursively updates the
-
-
The below speeds are WITHOUT
/fwith/ton a virtual box vm running on an older laptop without SSD storage. Modern hardware SHOULD be even faster -
master-------------------------->more_speed_2 - Initial Run------------------------------------>After user_init.cmd
I'm not sure if this is the best place to report this, here it goes.
When I run Cmder with this PR in a clean system (Windows Sandbox), I get an error on the invocation of powershell -f %cmder_root%\vendor\bin\create-cmdercfg.ps1, see below:
Initial run
9:55:00.98 DEBUG(init.bat): Env Var - CMDER_ROOT=C:\tools\cmder-1464
9:55:00.99 DEBUG(init.bat): Env Var - debug_output=1
Generating Clink initial settings in "C:\tools\cmder-1464\config\clink_settings"
1 file(s) copied.
Additional *.lua files in "C:\tools\cmder-1464\config" are loaded on startup.
Creating Cmder prompt config file: "C:\tools\cmder-1464\config\cmder_prompt_config.lua"
1 file(s) copied.
9:55:01.13 DEBUG(init.bat): Looking for Git install root...
9:55:01.18 DEBUG(:read_version): Env Var - git_executable=C:\tools\cmder-1464\vendor\git-for-windows\cmd\git.exe
9:55:01.37 DEBUG(:read_version): Env Var - GIT_VERSION_VENDORED=2.39.0.windows.2
9:55:01.45 DEBUG(:validate_version): ARGV[1]=VENDORED, ARGV[2]=2.39.0.windows.2
9:55:01.48 DEBUG(:parse_version): ARGV[1]=VENDORED, ARGV[2]=2.39.0.windows.2
9:55:01.52 DEBUG(:validate_version): Found Git Version for VENDORED: 2.39.0.windows.2
9:55:01.77 DEBUG(init.bat): Using vendored Git '2.39.0.windows.2'...
9:55:01.79 DEBUG(init.bat): Using Git from 'C:\tools\cmder-1464\vendor\git-for-windows...
9:55:01.82 DEBUG(init.bat): START - git.exe(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
9:55:01.87 DEBUG(init.bat): END - git.exe(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
9:55:01.92 DEBUG(init.bat): START - nix_tools(append): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
9:55:01.95 DEBUG(init.bat): END - nix_tools(append): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.10 DEBUG(init.bat): Found Git in: 'GIT_INSTALL_ROOT=C:\tools\cmder-1464\vendor\git-for-windows'
9:55:02.12 DEBUG(init.bat): START - vendor/bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.15 DEBUG(init.bat): END - vendor/bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.18 DEBUG(init.bat): START - bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.21 DEBUG(init.bat): END - bin(prepend): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.24 DEBUG(init.bat): START - cmder_root(append): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
9:55:02.29 DEBUG(init.bat): END - cmder_root(append): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin;C:\tools\cmder-1464
Creating initial user_aliases store in "C:\tools\cmder-1464\config\user_aliases.cmd"...
1 file(s) copied.
Running Git for Windows one time Post Install....
"running post-install"
'C:\Windows\system32\drivers\etc\hosts' -> '/etc/hosts'
'C:\Windows\system32\drivers\etc\protocol' -> '/etc/protocols'
'C:\Windows\system32\drivers\etc\services' -> '/etc/services'
'C:\Windows\system32\drivers\etc\networks' -> '/etc/networks'
The batch file cannot be found.
9:55:06.34 DEBUG(init.bat): Env Var - HOME=C:\Users\WDAGUtilityAccount
Creating user startup file: "C:\tools\cmder-1464\config\user_profile.cmd"
1 file(s) copied.
File C:\tools\cmder-1464\vendor\bin\create-cmdercfg.ps1 cannot be loaded because running scripts is disabled on this system. For
more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
ERROR: Failed to generate Cmder config
Elapsed Time: 0:0:8.91 (8.91s total)
C:\tools\cmder-1464
λ ver
Microsoft Windows [Version 10.0.19041.2486]
Second run
12:00:02.04 DEBUG(init.bat): Env Var - CMDER_ROOT=C:\tools\cmder-1464
12:00:02.07 DEBUG(init.bat): Env Var - debug_output=1
12:00:02.20 DEBUG(init.bat): Looking for Git install root...
12:00:02.27 DEBUG(:read_version): Env Var - git_executable=C:\tools\cmder-1464\vendor\git-for-windows\cmd\git.exe
12:00:02.42 DEBUG(:read_version): Env Var - GIT_VERSION_VENDORED=2.39.0.windows.2
12:00:02.48 DEBUG(:validate_version): ARGV[1]=VENDORED, ARGV[2]=2.39.0.windows.2
12:00:02.51 DEBUG(:parse_version): ARGV[1]=VENDORED, ARGV[2]=2.39.0.windows.2
12:00:02.56 DEBUG(:validate_version): Found Git Version for VENDORED: 2.39.0.windows.2
12:00:02.85 DEBUG(init.bat): Using vendored Git '2.39.0.windows.2'...
12:00:02.88 DEBUG(init.bat): Using Git from 'C:\tools\cmder-1464\vendor\git-for-windows...
12:00:02.92 DEBUG(init.bat): START - git.exe(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
12:00:02.95 DEBUG(init.bat): END - git.exe(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
12:00:02.98 DEBUG(init.bat): START - nix_tools(append): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;
12:00:03.01 DEBUG(init.bat): END - nix_tools(append): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.17 DEBUG(init.bat): Found Git in: 'GIT_INSTALL_ROOT=C:\tools\cmder-1464\vendor\git-for-windows'
12:00:03.20 DEBUG(init.bat): START - vendor/bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.23 DEBUG(init.bat): END - vendor/bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.26 DEBUG(init.bat): START - bin(prepend): Env Var - PATH=C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.31 DEBUG(init.bat): END - bin(prepend): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.34 DEBUG(init.bat): START - cmder_root(append): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin
12:00:03.37 DEBUG(init.bat): END - cmder_root(append): Env Var - PATH=C:\tools\cmder-1464\bin;C:\tools\cmder-1464\vendor\bin;C:\tools\cmder-1464\vendor\git-for-windows\cmd;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu\Scripts;C:\tools\cmder-1464\vendor\conemu-maximus5;C:\tools\cmder-1464\vendor\conemu-maximus5\ConEmu;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\WDAGUtilityAccount\AppData\Local\Microsoft\WindowsApps;;C:\tools\cmder-1464\vendor\git-for-windows\usr\bin;C:\tools\cmder-1464
12:00:03.62 DEBUG(init.bat): Env Var - HOME=C:\Users\WDAGUtilityAccount
12:00:03.65 DEBUG(init.bat): Calling - C:\tools\cmder-1464\config\user_profile.cmd
File C:\tools\cmder-1464\vendor\bin\create-cmdercfg.ps1 cannot be loaded because running scripts is disabled on this system. For
more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnauthorizedAccess
ERROR: Failed to generate Cmder config
Elapsed Time: 0:0:5.42 (5.42s total)
Clink v1.4.19 is available.
- To apply the update, run 'clink update'.
- To stop checking for updates, run 'clink set clink.autoupdate false'.
- To view the release notes, visit the Releases page:
https://github.com/chrisant996/clink/releases
@i-s-o Good catch. Try this
@daxgames Thank you for the great PR, I'm in the process of reviewing it. Excited to merge it soon!
@DRSDavidSoft Hopefully it works as well for you as it has for me.
I'm merging this in the development branch for further review. Please use the development branch as a base for any future PRs, I'll review your great changes very soon. Thank you once again! 🤝
Why are we getting back to using a development branch we abandonded that practice years ago.
@daxgames Good for the CI, because GitHub actions can produce compiled versions of branches. I just wanted to keep the master branch "stable" for now. When we merge development back into master eventually, they will contain the same commits. Sorry if it caused any issues