There are a few tips and tricks I learned about batch programming that I'd like to share, and to document for my own future reference.
You can use parentheses to link multiple lines so they are treated as a single line. This allows you to make nicely formatted if statements, like so:
if not exist %CD%\error_files\ (
mkdir %CD%\error_files\
)
The next trick that took me forever to understand the syntax of, is string manipulation. Take the variable %PATH% for example. It is a string. However what if I want to modify a portion of this string to my own liking? Look at the following: %PATH:;c:\AutoGCC=%
%PATH:;c:\folder=%
That code actually searches for a matching sequence of characters of the sequence ";c:\folder", and will set that portion of the string %PATH% to nothing. This is basically deleting an element from the %PATH% variable. You could also have done:
%PATH:;c:\folder=;c:\LOL%
Which would change the element ;c:\folder to ;c:\LOL.
There is also a nice way to edit the path (or any registry key) of a user's machine by editing the registry key for the system path! This will however require a restart to take effect. Here is the syntax I used in AutoGCC to modify my system's path (type reg add /? for information on the reg add command):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d "%PATH:;c:\AutoGCC=%" /f
You can also use the CALL command to launch a specific portion of your code as if it were its own batch file. This is really useful for making functions within your batch file. Take a look at the following code:
if exist %file% (
if %var% NEQ 2 (
call FUNCTION_1
)
)
:FUNCTION_1
do stuff...
...
...
goto EOF
The above code will go to the line labeled with FUNCTION_1 if %file% exists, and then return just below the goto FUNCTION_1 statement once the line goto EOF is reached. goto EOF sends the control to the end of the file, though since FUNCTION_1 was called by a call command, it is as if it is an emulated batch script of its own, and the emulation will close, not the original environment that called it.
These few things are extremely useful for me when working on my batch scripts, and hopefully will be for you as well!