I personally use the command prompt on Windows a lot, but it's always been very boring to look at. Now I know there are command prompt replacer apps out there which make it look much better (like Cmder), but I wanted to see how far we can customize it without installing any extra software. So let's see how far we can go.
Startup script
The first step is to create a batch script which will be run when we start the console, and a shortcut in the start menu or taskbar to launch it. Creating a batch script is easy, just create a file called _startup.bat
and put it in your user folder. You can add a welcome message to it if you like:
echo Welcome to my terminal!
Shortcut
Next comes creating the shortcut. To create a shortcut, we can right-click a blank spot in our user folder, and select New > Shortcut. In the location field we can enter this:
cmd /K "C:\Users\<username>\_startup.bat"
The /K
flag will run our script and return us to the command prompt. Now when we start the terminal, we should see our welcome message at the top.
We can also customize the icon of the shortcut, by right-clicking it and going to Properties > Change Icon. In the icon select dialog we only have the icon exported by cmd.exe, but we can choose from a list of icons in shell32.dll
by putting some randon text into the file select field and pressing Enter. This will throw an error, but will then default back to shell32.dll
.
Next we can add some colors to the terminal. Right-click the shortcut and select Properties > Colors tab. You can change any options on these tabs, but I've just changed opacity to 95%, and Screen Text to (red = 12, green = 180, blue = 12).
Another recent option on Windows 10 is under the Terminal tab, to disable scroll-forward. This removes all the blank space and the scrollbar on the right, which is quite cool.
Now we can drag this shortcut wherever we want, we can pin it to the start menu, or the taskbar, etc. Nice!
Better startup script
We now have a custom icon, custom color and a custom start script. We can enter any combination of commands into this startup script to customize it the way we want. Here's what I've got in mine, if you want to use it, you can copy this script into your _startup.bat
file.
rem Setup path to point to desktop C: cd "%USERPROFILE%\Desktop" rem Prepare script setlocal enabledelayedexpansion echo off cls echo Please wait... title Please wait... rem Get user's display name SET cmd="net user %USERNAME% | FIND /I "Full Name"" FOR /F "tokens=3 delims=, " %%A IN ('%cmd%') DO SET UserDisplayName=%%A rem Get installed RAM SET cmd="wmic ComputerSystem get TotalPhysicalMemory | findstr [0-9]" FOR /F %%A IN ('%cmd%') DO SET TotalMemory=%%A set TotalMemory=%TotalMemory:~0,-3% set /a TotalMemory=%TotalMemory%/1024 if %TotalMemory% gtr 2048 ( set /a TotalMemory=!TotalMemory!/1024 set TotalMemory=!TotalMemory! GB ) else ( set TotalMemory=!TotalMemory! MB ) rem Get system name SET cmd="wmic ComputerSystem get name" FOR /F "skip=1" %%A IN ('%cmd%') DO ( set ComputerName=%%A goto leaveSystemName ) :leaveSystemName rem Welcome message title %UserDisplayName%'s Terminal cls echo Welcome to %UserDisplayName%'s terminal :) echo. echo System details: echo - System name: %ComputerName% echo - Username: %USERNAME% echo - Installed RAM: %TotalMemory% rem Usage per drive SET cmd="wmic LogicalDisk get DeviceID,FreeSpace,Name | findstr .:" for /F "tokens=1,2" %%a IN ('%cmd%') DO ( rem Calculate free space in MB/GB set Space=%%b set Space=!Space:~0,-6! if not "!Space!" == "" ( set /a Space=!Space! / 1024 set Space=!Space! GB rem Output echo - Free space on drive %%a !Space! ) )
Wow, what a mess. Windows batch scripts really are pretty terrible. Let's analyze a few lines here though…
1-3: Sets the current working directory to your desktop.
5-10: Sets the window title, prevents command params being echoed out, and allows us to use delayed expansion, which allows us to overcome the way batch scripts handle variables inside of blocks. It allows us to use the !VarName!
style instead of %VarName%
, which is expanded during the line execution instead of just at the start of the block.
12-14: Gets the user's display name into the UserDisplayName
var.
16-26: Gets amount of installed RAM and puts it in the TotalMemory
var.
28-34: Puts the system name into the ComputerName
var.
36-44: Clears the screen and starts displaying the welcome message.
46-63: Displays free space for each drive.
And that's it! Since it's running a batch script, you can also execute any command line application and use the output in your welcome message.