Windows Batch Files


Useful variables

  • %0 - the command used to call the batch file (could be foo, ..\foo, c:\bats\foo, etc.)
  • %1 is the first command line parameter,
  • %2 is the second command line parameter,
    • and so on till %9 (and SHIFT can be used for those after the 9th).
  • %~nx0 - the actual name of the batch file, regardless of calling method (some-batch.bat)
  • %~dp0 - drive and path to the script (d:\scripts)
  • %~dpnx0 - is the fully qualified path name of the script (d:\scripts\some-batch.bat)
  • %cmdcmdline% - exact command line used to start the current Cmd.exe
    • When launched from a command console, this var is "%SystemRoot%\system32.cmd.exe"
    • When launched from explorer this var is cmd /c ""[d:\path\script.bat]" "

Useful Websites

Functions

Yes, you can do functions in batch files. I have another page where I put batch file functions. Windows Batch File Functions

Replace Chars in Strings

::Replace the character string 'NY' with 'WA'
SET test=I love NY
SET result=%test:NY=WA%
ECHO %result%          =I love WA

Remove Char from string

SET _no_spaces=%_some_var: =% 
SET _no_quotes=%_some_var:"=%   

Test if string has more than or less than X Chars

If all you need is to know if there are two or less characters in a variable you can see if a substring expands to nothing:

if not defined var (
  echo Var is empty!
) else if "%var:~2%"=="" (
  echo var contains 2 or less characters
) else echo var contain more than 2 characters

Substrings

Specify an offset and a length. You can also specify a negative offset

Postive Offset -- Outputs oob

Positive offset starts at the front of the string

set foo=foobar
echo %foo:~1,3%

Negative Offset -- Outputs oba

Negative offset, let's you start at the back of the string

set foo=foobar
echo %foo:~-4,3%

Determine if batch files was run from Command Console or Windows Explorer

At top of your program, add this code...

:: See if program was run from console (command line) or explorer (double click or windows shortcut)
set run_from=console
IF "%cmdcmdline:~0,3%"=="cmd" set run_from=explorer 



Later on, you can make decisions based on this...

:: if they ran from explorer, we need to pause to keep from closing the window
if %run_from%==explorer pause

IF ELSE STATEMENT

Make sure you do it exactly as shown

IF statement (
..
..
) ELSE (
...
...
)

Case Insensitive compare

:: Case Insenstive Compare
if /I %param% EQU %CompareValue% (