Jazz Forum Welcome to the Jazz Community Forum Connect and collaborate with IBM Engineering experts and users

How to get the port number from a scm daemon start command sent in a batch file

I am trying to start a daemon, do some work with it then terminate it on completion

I can do

start "my name" scm daemon start --port 49000

and then

scm daemon stop --port 49000

but cannot redirect the console application like so : -

start "my name" scm daemon start 2>%TEMP%\portLoc.txt

or

start "my name" scm daemon start >%TEMP%\portLoc.txt

or about three other variations used to get the port number, I don't want to kill all instances of scm. The number I want is there in the console window, but I can't get at it. I'd like not to hard code the port number to avoid using a port already in use or maybe errors when running the application twice. Any hints? Thanks

Richard

0 votes



2 answers

Permanent link
It looks like you need to escape the redirection character.

See http://superuser.com/questions/338277/windows-cmd-batch-start-and-output-redirection for some hints and tips.

0 votes

Comments

Did see that, when I add the escape characters, the process fires up for a second then closes down, so no dice. Thanks for the attempt


Permanent link
Try this:
start /b scm.exe daemon start > myName.log 2>&1

I understand that you will then find out the port number in the file myName.log for the use of "scm daemon stop". If the command works for you, you will not get any new command windows, so the title of the start command "my name" is of no use, and you should use the log file name to identify your daemon.

0 votes

Comments

Not enough chars to add this as a comment

Thanks, that helps, but I am loathe to mark it the right answer as I still can't get the port as the file is locked by the scm process somehow and stalls the system, delayed expansion **** in batch files can also bite you, powershell is the way ahead, but not for this customer!! Try running something like the following and tell me what I am doing wrong!

echo on
setlocal ENABLEDELAYEDEXPANSION
::set lscmLoc=B:\RTC-Client-Win-5.0.2-32bit\jazz\scmtools\eclipse\lscm.bat
::set scmLoc=B:\RTC-Client-Win-5.0.2-32bit\jazz\scmtools\eclipse\scm

set lscmLoc=C:\Utilities\RTC-With-DesManager\jazz\scmtools\eclipse\lscm.bat
set scmLoc=C:\Utilities\RTC-With-DesManager\jazz\scmtools\eclipse\scm
::you should run this from an RTC sandbox, scm assumes this, I am assuming you have a sandbox in c:\temp here...
c:
cd temp

::works but hard codes the port, port could be being used for something else, probably better than kiling everything though
::start "close me on completion" %scmLoc% daemon start --port 49403

start /b %scmLoc% daemon start > %TEMP%\portLoc.txt 2>&1
::set portLoc=<%TEMP%\portLoc.txt

cd %TEMP%
FOR /F "tokens=2" %A in ('portLoc.txt') do set ric=%A

set ric
echo %ric%

::wait for process to start up
::ping 127.0.0.1 -n 10 >nul
:: echo Login...
::call %lscmLoc% login -r https://server:9443/ccm/ -n serverRep -u b51648 -P b51648

:: List snapshots
::call %lscmLoc% list snapshots -r serverRep -m 1000 "JPT_Dev_Stream"

:: List components
::call %lscmLoc% list components -r serverRep -m 1000 -s "SS_MPU_0001"

:: echo Logout...
::call %lscmLoc% logout -r serverRep

::kils just one daemon
%scmLoc% daemon stop --port %ric%
endlocal

I have added an answer, but it was intended as a comment. I have tried using exclamation marks around  variables, found that notepad is somehow instantiated when I load the file containing the port number using a for loop, nothing seems to allow me to get and process the port numbers, batch files are a little before my time so could be doing something stupid, not sure what, don't usually get stuck on something apparently simple for a couple of hours!! delimiters are said to default to spaces and tabs so I have left that out the parameter I want should be token 2. Also tried running this direct and as a batch file with the requisite number of % signs

Nothing really "wrong" with it, as you've already narrowed down what's not working. We just need to work around it. Apparently the FOR command opens the file in "rw" mode and it fails. So we just need to open the file in "r" mode, same as you can open the file in notepad. I change this line

FOR /F "tokens=2" %A in ('portLoc.txt') do set ric=%A
to
set /P port= < portLoc.txt
FOR /F "tokens=2" %%A in ("%port%") do set ric=%%A
and it works for me.

Note 1: during testing, I need to add some delay (using ping) before the set command to allow the file to be created, otherwise I get blank content.
Note 2: The correct syntax for a variable for the FOR command in a batch file is %%variable, instead of %variable. Check the help content for details.

Your answer

Register or log in to post your answer.

Dashboards and work items are no longer publicly available, so some links may be invalid. We now provide similar information through other means. Learn more here.

Search context
Follow this question

By Email: 

Once you sign in you will be able to subscribe for any updates here.

By RSS:

Answers
Answers and Comments
Question details
× 1,208
× 160

Question asked: Nov 08 '16, 7:19 a.m.

Question was seen: 5,190 times

Last updated: Nov 10 '16, 2:51 a.m.

Confirmation Cancel Confirm