Discussion:
How to make goto when nowhere to go ?
(too old to reply)
Synapse Syndrome [KGB]
2009-06-13 02:36:28 UTC
Permalink
(NT shell scripting)

Say I have a goto parameter command -

goto :%parm%

If the batch label does not exist, the script ends with the error:

"The system cannot find the batch label specified - whatever"

I do not want the error message displayed, and I want the script to go and
do something else instead. If I try..

goto :%parm:~2% || goto :error

..that does not work.

Any solution?

Cheers

ss.
Al Dunbar
2009-06-13 03:46:20 UTC
Permalink
Post by Synapse Syndrome [KGB]
(NT shell scripting)
Say I have a goto parameter command -
goto :%parm%
"The system cannot find the batch label specified - whatever"
I do not want the error message displayed, and I want the script to go and
do something else instead. If I try..
goto :%parm:~2% || goto :error
..that does not work.
Any solution?
NT shell scripting, on what O/S: nt3.51, nt4, w2k, w2k3, w2k8, xp?

I don't think you can trap an attempt to go to an invalid label. The
alternative is to check the value of the parm variable to see if it is a
valid label. One way:

do %%L in (label1 label2 label3) if "%parm%" EQU "%%L" goto:%parm%

Another way would be to use FIND or FINDSTR to search the batch file for
instances of ":%parm%". Trouble is if there was a "label called ":whatsit"
and the value of parm was "what"...

/Al
T Lavedas
2009-06-13 13:06:09 UTC
Permalink
Post by Al Dunbar
Post by Synapse Syndrome [KGB]
(NT shell scripting)
Say I have a goto parameter command -
goto :%parm%
"The system cannot find the batch label specified - whatever"
I do not want the error message displayed, and I want the script to go and
do something else instead.  If I try..
goto :%parm:~2% || goto :error
..that does not work.
Any solution?
NT shell scripting, on what O/S: nt3.51, nt4, w2k, w2k3, w2k8, xp?
I don't think you can trap an attempt to go to an invalid label. The
alternative is to check the value of the parm variable to see if it is a
    do %%L in (label1 label2 label3) if "%parm%" EQU "%%L" goto:%parm%
Another way would be to use FIND or FINDSTR to search the batch file for
instances of ":%parm%". Trouble is if there was a "label called ":whatsit"
and the value of parm was "what"...
/Al
Your batch skills are a bit rusty, Al. That should be ...

FOR %%L in (label1 label2 label3) DO if "%parm%" EQU "%%L" goto:%parm
%

Tom Lavedas
**************
Al Dunbar
2009-06-13 22:34:48 UTC
Permalink
Post by T Lavedas
Post by Al Dunbar
Post by Synapse Syndrome [KGB]
(NT shell scripting)
Say I have a goto parameter command -
goto :%parm%
"The system cannot find the batch label specified - whatever"
I do not want the error message displayed, and I want the script to go and
do something else instead. If I try..
goto :%parm:~2% || goto :error
..that does not work.
Any solution?
NT shell scripting, on what O/S: nt3.51, nt4, w2k, w2k3, w2k8, xp?
I don't think you can trap an attempt to go to an invalid label. The
alternative is to check the value of the parm variable to see if it is a
do %%L in (label1 label2 label3) if "%parm%" EQU "%%L" goto:%parm%
Another way would be to use FIND or FINDSTR to search the batch file for
instances of ":%parm%". Trouble is if there was a "label called ":whatsit"
and the value of parm was "what"...
/Al
Your batch skills are a bit rusty, Al. That should be ...
FOR %%L in (label1 label2 label3) DO if "%parm%" EQU "%%L" goto:%parm
%
Tom Lavedas
**************
Yeah, I always forget the DO. Fortunately, that throws an error which
reminds me. So thanks for being the error message in this case ;-)

/Al

Pegasus [MVP]
2009-06-13 20:24:02 UTC
Permalink
Post by Synapse Syndrome [KGB]
(NT shell scripting)
Say I have a goto parameter command -
goto :%parm%
"The system cannot find the batch label specified - whatever"
I do not want the error message displayed, and I want the script to go and
do something else instead. If I try..
goto :%parm:~2% || goto :error
..that does not work.
Any solution?
Cheers
ss.
If you want your batch file to be robust then you must check if the
parameter passed to it is a valid label. Relying on some internal error
capturing process is not good a programming technique. You could do it like
this:

@echo off
set Labels=/one/two/three/twenty/
if not "%1"=="" echo %Labels% | find /i "/%1/" > nul || echo Invalid label

Make sure to surround each label name with a forward slash and not to use
any labels with embedded forward slashes.
Loading...