Archive: Passing name of a batch file as a parameter


Passing name of a batch file as a parameter
  I must call my NSIS setup.exe file from within a batch file and I need to assign to a variable the name of the batch file that called setup.exe

Alternatively I could place the name of the file (or a parameter) after setup.exe (as in the sample batch file below) and somehow I would like to assign that file/parameter to a variable. I tried using the GetParameters sample listed in Functions.htm, but have not been able to figure it out.

Thanks


MyFile.bat
------------------------
Setup.exe TestMode
------------------------


in your batchfile:

setup.exe /Dcaller=%0

and then you should have ${caller} defined as you batchfile name.

untested, but it should work.

-Scott


Scott or anyone,

Can you provide some more details? I have not been able to figure it out yet.

Thanks


/D is only for the compiler, not for the installer.

Can't you do it without this batch file? Maybe the installer can take over the functions of the batchfile. Else, write a small txt file to $TEMP and let the installer read it. Or use the registry...

-Hendri.


I agree with Hendri, everything that can be done with a batch can be done with NSIS. If you still want to do it with the batch file you sohuld call setup.exe like this:
setup.exe %0

And in NSIS:


Call GetParameters

Pop$1
MessageBox MB_OK$1
>
You will see that $1 now contains the paramters you sent to setup.exe which is the name of the batch file. If $1 does not contain the path to the batch file you can always add $EXEDIR to it.

Thanks for the suggestions guys, I will try them soon. I am using NSIS to create a utility to perform certain things. This file needs to be called by third-party software and usually they specify it must be a batch file, that is why I am having the batch file call my NSIS file.
I want the NSIS file to look for some values in the calling batch file, that is why I need the utility to find out the name of the batch file. I don't want to create a different exe for each product so I want to be able to read the variables from an external file which in this case would be in the batch file itself (If I can read the values from the batch file, I only need to have two files instead of three).
Now I just need to figure out how to read a batch as if it was an ini file.

Carlos


Hi,

Using the unmodified "GetParameters" code in Functions.htm and Kichik's suggestion, I am able to get the name and full path of the calling batch file. Is there a way to just get the name of the calling batch file without it's path?

Carlos


Modify the code of GetParent to not cut the first part but the last part from the full path. Eg.:


Function GetParentMod
Exch $0 ; old $0 is on top of stack
Push $1
Push $2
StrCpy $1 -1
loop:
StrCpy $2 $0 1 $1
StrCmp $2 "" exit
StrCmp $2 "\" exit
IntOp $1 $1 - 1
Goto loop
exit:
IntOp $1 $1 + 1 ;modified
StrCpy $0 $0 "" $1 ;modified
Pop $2
Pop $1
Exch $0 ; put $0 on top of stack, restore $0 to original value
FunctionEnd

-Hendri.

Thanks Hendri, I tried the modified Function GetParentMod and it works great under Win95, but when tested under Win 2000, for some strange reason it adds a " at the end of the calling file name (ie: mybatch.bat").

Carlos


I don't see the reason why this would happen, but you can always check for this and delete the " if necessary:

; Put string
StrCpy $0 'C:\My docs\prob.exe"'
MessageBox MB_OK $0
; Perform check
StrCpy $1 $0 "" -1
StrCmp $1 '"' 0 Done
StrCpy $0 $0 -1
Done:
MessageBox MB_OK $0

-Hendri.

Great! It now works properly under Win 2000. I still need to test it under a variety of systems. Many thanks to Hendri and those who provided suggestions.

Carlos


Thx Carlos.
-Hendri.