Use the syntax below to edit and replace the characters assigned to a string variable.
Syntax %variable:StrToFind=NewStr% %~[param_ext]$variable:Param Key StrToFind : The characters we are looking for NewStr : The chars to replace with (if any) variable : The environment variable param_ext : Any filename Parameter Extension Param : A command line parameter (e.g. 1)
This Edit/Replace syntax can be used anywhere that you would use the %variable% such as ECHOing the variable to screen or setting one variable = another
param_ext cannot be %* which typically represents a whole set of parameters, but this is easily worked around by setting a variable=%*
"StrToFind" can begin with an asterisk, in which case it will replace all characters to the left of "StrToFind".
By leaving NewStr blank, you can delete characters.
Using both an asterisk and NewStr=null effectively provides a left$() or right$() function.
The variable _test containing 12345abcabc is used for all the following examples:
::Replace '12345' with 'Hello ' SET _test=12345abcabc SET _result=%_test:12345=Hello % ECHO %_result% =Hello abcabc ::Replace the character string 'ab' with 'xy' SET _test=12345abcabc SET _result=%_test:ab=xy% ECHO %_result% =12345xycxyc ::Delete the character string 'ab' SET _test=12345abcabc SET _result=%_test:ab=% ECHO %_result% =12345cc ::Delete the character string 'ab' and everything before it SET _test=12345abcabc SET _result=%_test:*ab=% ECHO %_result% =cabc ::Replace the character string 'ab' and everything before it with 'XY' SET _test=12345abcabc SET _result=%_test:*ab=XY% ECHO %_result% =XYcabc :: To remove characters from the right hand side of a string is :: a two step process and requires the use of a CALL statement :: e.g. SET _test=The quick brown fox jumps over the lazy dog :: To delete everything after the string 'brown' :: first delete 'brown' and everything before it SET _endbit=%_test:*brown=% Echo We dont want: [%_endbit%] ::Now remove this from the original string CALL SET _result=%%_test:%_endbit%=%% echo %_result%
All the examples on this page assume the default Expansion of variables, if you are using DelayedExpansion then you can choose to change the variable references to !_variable! instead of %_variable%
One advantage of DelayedExpansion is that it will allow you to replace the % character, it will still have to be escaped as %% but the replace action will then treat it like any other character:
Replace the letter P with a percent symbol:
To delete space characters use the same syntax as above:
SET _no_spaces=%_some_var: =%
To test for the existence of a value we can use a temporary variable, delete the string we are looking for (if it exists) and then compare the two variables with EQU
Example: test for the existence of the string "London" in a variable containing text (that could be in any order) "Aberdeen, London, Edinburgh"
Set _cities="Aberdeen, London, Edinburgh"
:: Remove London if found
IF NOT %_dummy% == %_cities% (ECHO London was found.) ELSE (ECHO London was not found.)
The %PATH% variable contains a list of folder names.
If you have a parameter containing a valid 'folder' this can be compared with the PATH variable.
This is done using the syntax: $variable:parameter
%PATH% = C:\Windows\system32;C:\Windows;C:\utils\jdk\bin
batch parameter %1 = C:\utils\jdk\bin
To get the drive and Path
This will either return "C:\utils\jdk\bin" or a NULL if the item is not found in the %PATH%
If the batch parameter was supplied as %2 then this would be: ECHO %~dp$PATH:2
This syntax can be applied where:
- The parameter is any valid parameter (%1 %2 %G) but it must contain a Full Path (not a pathname)
- The variable is %PATH% or any other variable that contains one or more Paths or pathnames separated by semicolons ;
- If nothing is found by the search, then this will return an empty string (NULL)
Be wary of using the syntax on this page to modify the PATH - the User path can be edited, but the System path remains read-only for most users.
You can use the %variable: syntax and provide each of the parameters from other variables, for example if you have
%_FullString%=The ballad of John and Yoko
To remove the %_search% string from the%_FullString% you might try:SET _result=%_FullString:~%_Search%=%
Unfortunately this will not work because the : syntax expects a value not a variable.
To work around this use the CALL command, in this case the CALL replaces the variable shown in bold with its value:SET "_FullString=The ballad of John and Yoko" SET "_Search=John" CALL SET _result=%%_FullString:%_Search%=%%
:: If nothing was removed then the search string was not found. If /i "%_result%"=="%_FullString%" (Echo String not found) ELSE (Echo String found)
“A phony smile will never replace honest integrity” ~ Bob Martinelli
SUBSTRING of a variable :~
PARAMETERS - Filename Parameter Extensions.
strlen.cmd - Get string length.
PATH - Display or set a search path for executable files.