Page 1 of 1
String variable substitution
Posted: 17 Jul 2008 04:33
by duke
Hi,
I hope someone can help
I am trying to use the Environment variable substitution method
%PATH:str1=%
this will take the string in the path variable search for "str1" and remove it.
what i need to do is remove a specific string stored in the variable in my example as nextcommand.
i have tried several combinations but using the above example i dont think you can substitute a string variable in place of str1
can someone help. below is the code i am trying to fix
Code: Select all
@echo off
set output=%*
set nextcommand=%1 %2 %3 %4 %5 %6 %7
echo %nextcommand%
set refoutput=%output:%nextcommand=%
echo %refoutput%
What i am trying to do is take a list args from a batch script and take pieces of the batch args in different combination to run other programs. If someone can think of a better way, please advise
May thanks
Posted: 17 Jul 2008 07:47
by greenfinch
Hi duke,
Don't know if this helps - it runs through all parameters passed to a batch and if any match certain values, does something else. Here it calls another subroutine, but it might just be setting a new variable, then you use that later on.
Code: Select all
FOR %%a in (%*) do (call :procparams %%a)
GOTO next
:procparams
if %1==something (call :something)
if %1==something2 (call :something2)
if %1==something2 (call :something2)
GOTO:EOF
:next
Posted: 17 Jul 2008 08:56
by duke
Hi Greenfinch,
I have tried something similar Rather than take a substring of %* i tried to build my string using a shift and label to make a loop, but unfortunatly its doesnt work correctly. I seem to face a different problem
I loop through the args adding the argument i require to a string but i am so of my arguments have quotes ie
example.bat arg1 (%0) arg2(%1) agr3(%2) "arg4" (%3)
now if i add %2 and %3
set "command=%2% %3%
that does not work and i get unexpected error.
Posted: 17 Jul 2008 09:45
by greenfinch
Sorry I'm a bit confused.
If I name that script in your first post 'refoutput.cmd', what do you want to get from:
Posted: 17 Jul 2008 10:09
by duke
it should take list of args as many as required for example 15
make a string talking all the args (set output=%*)
make a string taking the first 7 args (set nextcommand=%1 %2 %3 %4 %5 %6 %7)
remove the first 7 arguments from the full set of arguments (set refoutput=%output:%nextcommand=%)
output the reminder of the arguments echo %refoutput%
Posted: 17 Jul 2008 10:15
by greenfinch
Got it. I had wanted to something like this a few weeks ago, and only just worked it out now - so thank you!
Code: Select all
setlocal ENABLEDELAYEDEXPANSION
set output=%*
set nextcommand=%1 %2
set refoutput=!output:%nextcommand% =!
echo %refoutput%
Posted: 17 Jul 2008 10:36
by duke
Mr greenfinch you are a star!!
I am greatly in your debt!!
That works perfectly!
could you please explain what the
setlocal ENABLEDELAYEDEXPANSION
and the ! ! marks do.i have not come across this before
once again your help is greatly appreciated
Posted: 17 Jul 2008 10:55
by greenfinch
This explains it quite well:
http://batcheero.blogspot.com/2007/06/h ... nsion.html
Instead of % you use ! to indicate a variable but these are only recognised if you use setlocal ENABLEDELAYEDEXPANSION
In the case of
Code: Select all
set refoutput=!output:%nextcommand% =!
it delays the expansion of !output! until it's expanded %nextcommand%
The space before the =! is just cos there's a space left over after you remove arg1 arg2 etc.
Glad to help,
GF