Tee time

I've always felt that proficiency in the command language of an OS was an essential part of being able to write code for it.  I suppose it's possible to write code in a high-level language all day without knowing anything about writing batch files, but I wouldn't feel very good about my skills as a developer if I couldn't get around in my host OS's command language.  I think you have to know how to write a batch file or two just to have some street cred.  And I think being handy with batch files can save you some real work and make seemingly hard admin or build tasks much simpler, even with a batch file language as rickety and unwieldy as the one Windows offers.

Unix users like to brag about how superior their shell is to the Windows shell, and I have to admit there are some Unix commands I miss occasionally on Windows.  One of those is the tee command.  Tee allows you to direct the output from a command or batch file to the console and to a file simultaneously.  I wrote a batch file that simulated tee a few years ago, and I needed it again the other day, so I dug through my bag of tricks, found it, and blew the dust off of it.  Here it is for your enjoyment (save the script below as tee.cmd):

@echo off

IF (%1)==() GOTO help

::Overwrite the file (W2K/XP require /Y)
SET slash_y=
ver ¦ find "Windows NT" >nul
if ERRORLEVEL 1 set slash_y=/Y

::Overwrite the file
copy %slash_y% nul %1 >nul 2>&1

for /f "tokens=1* delims=]" %%A in ('find /V /N ""') do (
>con echo.%%B
>>%1 echo.%%B
)

GOTO :eof

:help
ECHO.
ECHO Pipe text to the console and redirect to a file simultaneously
ECHO.
ECHO Usage: command | tee filename

Comments

  • Anonymous
    October 27, 2005
    Here are Win32 ports of some Unix commands:

    http://unxutils.sourceforge.net/

    sed has been a particular favorite of mine. :)
  • Anonymous
    October 28, 2005
    Personally, I'm a Cygwin fan...

    http://www.cygwin.com/
  • Anonymous
    July 17, 2006
    Can it work if the command outputs continously? .... like unix tee
  • Anonymous
    August 29, 2006
    I've been looking for something like this, but your script doesn't provide real time output of stdout.  It's really not the same thing at all.
  • Anonymous
    August 29, 2006
    The comment has been removed
  • Anonymous
    March 06, 2007
    I saved the script as mytee.bat and tried to use it with xcopy command, the target directory and source directory contents are as follows. But it hung there without displaying anything. C:JunkTemp1>dir Volume in drive C has no label. Volume Serial Number is 202E-F715 Directory of C:JunkTemp1 03/06/2007  01:33 PM    <DIR>          . 03/06/2007  01:33 PM    <DIR>          .. 03/05/2007  11:19 AM               396 a.bat 03/06/2007  01:14 PM                12 aaa.txt 03/05/2007  10:19 AM                20 b.bat 03/05/2007  08:20 AM                53 exclude.txt 03/05/2007  01:39 PM             2,502 mycopy.bat 03/05/2007  01:39 PM             2,502 mycopy.bat_for_email 03/05/2007  08:20 AM               885 mycopy.bat_original 03/05/2007  12:14 PM             2,256 mycopy1.bat 03/06/2007  12:02 PM             2,487 mycopyNoEmptyFolder.bat 03/06/2007  01:33 PM               455 mytee.bat 03/06/2007  01:12 PM                 0 useles.txt 03/06/2007  01:37 PM               921 useless.txt 03/06/2007  01:39 PM               788 useless1.txt              13 File(s)         13,277 bytes               2 Dir(s)  62,253,010,944 bytes free C:JunkTemp1>

C:JunkScript> C:JunkScript>dir Volume in drive C has no label. Volume Serial Number is 202E-F715 Directory of C:JunkScript 03/06/2007  01:33 PM    <DIR>          . 03/06/2007  01:33 PM    <DIR>          .. 03/05/2007  11:19 AM               396 a.bat 03/06/2007  01:14 PM                12 aaa.txt 03/05/2007  10:19 AM                20 b.bat 03/05/2007  08:20 AM                53 exclude.txt 03/05/2007  01:39 PM             2,502 mycopy.bat 03/05/2007  01:39 PM             2,502 mycopy.bat_for_email 03/05/2007  08:20 AM               885 mycopy.bat_original 03/05/2007  12:14 PM             2,256 mycopy1.bat 03/06/2007  12:02 PM             2,487 mycopyNoEmptyFolder.bat 03/06/2007  01:33 PM               455 mytee.bat 03/06/2007  01:12 PM                 0 useles.txt 03/06/2007  01:37 PM               921 useless.txt              12 File(s)         12,489 bytes               2 Dir(s)  62,253,043,712 bytes free C:JunkScript>xcopy . C:JunkTemp1 2>&1|mytee.bat C:Junkuseless2.txt