There's a very useful feature that FoxPro users have had for over 2 decades: being able to output text in any format, with WYSIWYG and the ability to embed expressions (The TEXT…ENDTEXT command)


Generating XML, HTML, Bat files, PowerShell Script, etc is a breeze with this command. Free form text between the "TEXT" and "ENDTEXT" commands is allowed, with embedded expressions


You can also just copy text from an existing HTML/XML, etc. source file and paste it directly into VB or Fox, modifying it to embed an expression.


FoxPro even allows you to change the delimiters (default "<<" and ">>") of embedded expressions with the SET TEXTMERGE DELIMITERS command . Unfortunately, it only allows a max of 2 chars as the delimiters, whereas the VB XML Expression hole requires 3 chars for the left delimiter "<%=".



You can use the XML features of VB 2008 to create such a raw text file!


In VB, to embed a "<" you can use "&lt;" or <%= "<" %>



Fox code sample:





ERASE (sOutputFile)

ERASE (sScriptFile)


rem This is a bat file that does a dir on a path and redirects output to a file

rem the following line is something like "dir <path> >> d:\t.txt"

dir >> <% sOutputFile %>

echo This text goes to the output <%TRANSFORM(DATETIME()) %> <% sOutputFile %>




run cmd /c &sScriptFile

IF FILE(sOutputFile)







VB Code Sample:


Module Module1


    Sub Main()

        Dim sOutputFile = "d:\t.txt"

        Dim sScriptFile = "d:\t.bat"

        If My.Computer.FileSystem.FileExists(sOutputFile) Then


        End If

        Dim BatFile = _


rem This is a bat file that does a dir on a path and redirects output to a file

rem the following line is something like "dir &lt;path> >> d:\t.txt"

dir "<%= My.Application.Info.DirectoryPath %>" >> <%= sOutputFile %>

echo This text goes to the output <%= DateTime.Now.ToString %> >> <%= sOutputFile %>



        My.Computer.FileSystem.WriteAllText(sScriptFile, BatFile.Value, False, Text.Encoding.ASCII)

        Dim proc = System.Diagnostics.Process.Start("cmd", "/c " + sScriptFile)


        Dim sOutputString = ""

        If My.Computer.FileSystem.FileExists(sOutputFile) Then

            sOutputString = My.Computer.FileSystem.ReadAllText(sOutputFile)

        End If

        MsgBox("Proc Done " + sOutputString)

    End Sub


End Module






VB Code output


Volume in drive C is Calvinh1C

 Volume Serial Number is A815-FF6E


 Directory of C:\Documents and Settings\calvinh\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\bin\Debug


10/04/2007  09:40 AM    <DIR>          .

10/04/2007  09:40 AM    <DIR>          ..

10/04/2007  09:40 AM            15,872 ConsoleApplication1.exe

10/04/2007  09:40 AM            40,448 ConsoleApplication1.pdb

10/04/2007  09:39 AM             9,568 ConsoleApplication1.vshost.exe

09/24/2007  08:47 PM               490 ConsoleApplication1.vshost.exe.manifest

10/04/2007  09:40 AM               127 ConsoleApplication1.xml

               5 File(s)         66,505 bytes

               2 Dir(s)  56,774,217,728 bytes free

This text goes to the output 10/4/2007 9:40:18 AM






See also:


Use temporary projects in Visual Studio

LINQ Cookbook, Recipe 8: Querying XML Using LINQ

Start using XML and XSLT to create HTML

Use a simple XSLT to read the RSS feed from a blog

Generating VBScript to read a blog