Batch files: deleting first/middle/ending parts of environment variables
Posted by jpluimers on 2021/01/06
Batch files are often a pain to write, but you cannot always rewrite them in PowerShell.
The pain below is about deleting parts of environment variables in batch files.
I’ll just redirect to and quote from posts that can way better describe this than I do:
- [WayBack] Check if Batch variable starts with “…” – Stack Overflow made me find
- [WayBack] windows – Batch – Delete Characters in a String – Super User
- [WayBack] CMD Variable edit replace – Windows CMD – SS64.com
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:
Setlocal EnableDelayedExpansion
_demo=somePdemoPtextP
_demo=!_demo:P=%%!
Remove spaces from a text string
To delete space characters use the same syntax as above:
SET _no_spaces=%_some_var: =%
–jeroen
Leave a Reply