batch-filecmdio-redirectionibm-doors

Windows batch redirect output to console


The summary of this question is I have a command I'm running in batch, Some.exe args but it is not outputting to the console. It does however output to a text file if used like Some.exe args > test.txt. I've tried stuff like @Some.exe args and Some.exe args > CON to get it to output to the console, but neither seems to work.

Are there any other approaches which might work?


This follows on from a previous question I asked DOORS make console the interactive window.

I'm calling a program called DOORS through a batch script. It runs a simple script, hello.dxl that looks like

cout << "Hello world"

The batch script, Run.bat looks like

"C:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.exe" -u test -pass testPass -b hello.dxl

When this is run, no output appears on the screen and there are no popup windows or anything (if hello.dxl said print("Hello World") an interactive window would pop-up, but not with cout)

If I add > test.txt to the end of the command

"C:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.exe" -u test -pass testPass -b hello.dxl > test.txt

It outputs the Hello World to test.txt successfully. Something I noticed is when using print("Hello World") there was no output sent to the test.txt file and an interactive window popped up so it looks like cout is the way to go.

So I though the output might just not be being output anywhere, so I tried adding > CON instead to try to force it to go to the console.

"C:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.exe" -u test -pass testPass -b hello.dxl > CON

But that still resulted in a blank output.

I also tried adding an @, before the command, as suggested in this Batch - redirect program output to current console, like

@"C:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.exe" -u test -pass testPass -b hello.dxl

or

@"C:\Program Files\IBM\Rational\DOORS\9.6\bin\doors.exe" -u test -pass testPass -b hello.dxl > CON

But no luck there either

I would have tried to reproduce this issue without DOORS but I don't know what is causing it in the first place.


Edit: I'm not really looking to use > test.txt & type test.txt as that is the current workaround I am using. But ideally I don't want it outputting to a text file


Solution

  • This is more a workaround.
    The idea is to a use a pipe program in order to redirect the output of the Windows program to the console:

    SomeWinProg SomeArgs 2>>&1 | SomePipeProg PipeProgArgs
    

    As a pipe program you may use a program that passes throug everything, like:

    SomeWinProg SomeArgs 2>>&1 | findstr /r "/c:.*"
    

    If this works or not depends on the Windows program.

    Concerning the timing:
    There may be some trouble when you have a long time running Windows program which produces sporadic output or when the output is done always to the same line (no line feeds, only carriage returns) and you want to have the output in real time.
    In these cacses Windows programs like findstr or find are a little bit weak.
    On github there is an implementation of mtee thats fits better:

    SomeWinProg SomeArgs 2>>&1 | mtee nul