Harshal
Harshal

Reputation: 946

Both if and else block are executed in Batch script

I am new to Batch scripting. I am trying to write a script which parses given command and check if argument with name 'folder 'is present in that command and if not , add that argument with default value.

I have written following script. This scripts executes correctly if argument is missing. But if argument is present , both if and else blocks are executed.

Please help. Thanks in advance.

@echo off

set ARGS=-action generate -folder "Source"
set t=%ARGS%

echo %t%|find "-folder" >nul
if errorlevel 1 (
    goto setDefaultFolder
) else (
    echo Folder is specified in command
)

:setDefaultFolder
echo Folder is NOT specified in command. User's current directory will be used as Folder.
set folderArgName=-folder
set folderArgValue="%cd%"
set folderArg=%folderArgName% %folderArgValue%
echo folderArgName : %folderArgName%
echo folderArgValue : %folderArgValue%
echo folderArg: %folderArg%
set ARGS=%ARGS% %folderArg%
echo ARGS : %ARGS%

Output of code :

Folder is specified in command
Folder is NOT specified in command. User's current directory will be used as Folder.
folderArgName : -folder
folderArgValue : "C:\work"
folderArg: -folder "C:\work"
ARGS : -action generate -folder "Source" -folder "C:\work"

Upvotes: 1

Views: 272

Answers (1)

Dijkgraaf
Dijkgraaf

Reputation: 11527

You have to have a goto in the else, that goes to after the setDeafultFolder, otherwise it just will execute the setDefaultFolder after it

@echo off

set ARGS=-action generate -folder "Source"
set t=%ARGS%

echo %t%|find "-folder" >nul
if errorlevel 1 (
    goto setDefaultFolder
) else (
    echo Folder is specified in command
    goto endOfBatch
)

:setDefaultFolder
echo Folder is NOT specified in command. User's current directory will be used as Folder.
set folderArgName=-folder
set folderArgValue="%cd%"
set folderArg=%folderArgName% %folderArgValue%
echo folderArgName : %folderArgName%
echo folderArgValue : %folderArgValue%
echo folderArg: %folderArg%
set ARGS=%ARGS% %folderArg%
echo ARGS : %ARGS%

:endOfBatch

Upvotes: 3

Related Questions