Using DSQUERY and SHELLESC.EXE, I have scripted Mailing.bat to generate mailing labels from Active directory users.

Each label contains:

Display Name                              Post Office Box or Address 1                              Address 1 or Address 2                              City, State, Postal Code                              Country (if NOT US)
The syntax for using Mailing.bat is:

Mailing Filename.tab

Where Filename.tab is the name of the file that will contain the label information, in Tab Separated Value format, suitable for using with the Microsoft Word Mail Merge Wizard.

Mailing.bat contains:

                              @echo off                              if \{%1\}==\{\} @Echo Syntax: Mailing Filename.tab&goto :EOF                              setlocal                              set file=%1                              set file="%file:"=%"                              set wrk=%TEMP%\Mailing_%RANDOM%                              set wrk1="%wrk%.TM1"                              set wrk2="%wrk%.TM2"                              set wrk3="%wrk%.TM3"                              set wrk4="%wrk%.vbs"                              if exist %wrk1% del /q %wrk1%                              :: VB Script to replace » with tabs                              @echo dim fso, iFile, oFile,rFile, wFile, iString, oString>%wrk4%                              @echo iFile=%wrk3%>>%wrk4%                              @echo oFile=%file%>>%wrk4%                              @echo set fso = CreateObject("Scripting.FileSystemObject")>>%wrk4%                              @echo set rfile = fso.OpenTextFile(iFile, 1, false)>>%wrk4%                              @echo set wFile = fso.CreateTextFile(oFile, 2)>>%wrk4%                              @echo Do until rFile.AtEndOfStream = True>>%wrk4%                              @echo. iString = rFile.ReadLine>>%wrk4%                              @echo. oString = Replace(iString, "»", vbtab)>>%wrk4%                              @echo. wFile.writeLine oString>>%wrk4%                              @echo loop>>%wrk4%                              @echo rFile.close>>%wrk4%                              @echo wFile.close>>%wrk4%                              @echo "Name"»"Address 1"»"Address 2"»"City"»"State"»"Postal Code"»"Country">%wrk3%                              set qry1=dsquery * domainroot -filter "(&(objectCategory=Person)(objectClass=User))"                              set qry2=-attr sAMAccountName displayName postOfficeBox l st postalCode c streetAddress -L -limit 0                              set prev=NONE                              for /f "Tokens=*" %%a in ('%qry1% %qry2%^|SHELLESC') do (                               set line=%%a                               call :build                              )                              call :pre                              call :sort                              call :output                              del /q %wrk2%                              cscript //nologo %wrk4%                              del /q %wrk3%                              del /q %wrk4%                              type %file%                              endlocal                              goto :EOF                              :build                              if /i "%line:~0,15%" EQU "sAMAccountName:" goto pre                              if /i "%line:~0,12%" EQU "displayName:" set dn=%line:~13%&goto :EOF                              if /i "%line:~0,14%" EQU "postOfficeBox:" set po=%line:~15%&goto :EOF                              if /i "%line:~0,2%" EQU "l:" set city=%line:~3%&goto :EOF                              if /i "%line:~0,3%" EQU "st:" set st=%line:~4%&goto :EOF                              if /i "%line:~0,11%" EQU "postalCode:" set pc=%line:~12%&goto :EOF                              if /i "%line:~0,2%" EQU "c:" set co=%line:~3%&goto :EOF                              if /i "%line:~0,14%" EQU "streetAddress:" set s1=%line:~15%&goto :EOF                              if "%s2%" EQU "" set s2=%line%&goto :EOF                              if "%s3%" EQU "" set s3=%line%                              goto :EOF                              :pre                              if "%prev%" EQU "NONE" set prev=YES&goto :prex                              if "%city%" EQU "" goto prex                              @echo "%co%"»"%pc%"»"%st%"»"%dn%"»"%po%"»"%city%"»"%s1%"»"%s2%"»"%s3%">>%wrk1%                              :prex                              set dn=                              set po=                              set city=                              set st=                              set pc=                              set co=                              set s1=                              set s2=                              set s3=                              goto :EOF                              :sort                              sort %wrk1% /O %wrk2%                              del /q %wrk1%                              goto :EOF                              :output                              for /f "Tokens=1-9 Delims=»" %%a in ('type %wrk2%^|SHELLESC') do (                               call :output1 %%a %%b %%c %%d %%e %%f %%g %%h %%i                              )                              goto :EOF                              :output1                              set co=%1                              set pc=%2                              set st=%3                              set dn=%4                              set po=%5                              set city=%6                              set s1=%7                              set s2=%8                              set s3=%9                              set a1=""                              set a2=""                              if %po% NEQ "" set a1=%po%                              if %s1% NEQ "" call :address %s1%                              if %s2% NEQ "" call :address %s2%                              if %s3% NEQ "" call :address %s3%                              @echo %dn%»%a1%»%a2%»%city%»%st%»%pc%»%co%>>%wrk3%                              goto :EOF                              :address                              if %1 EQU "" goto :EOF                              if %a1% EQU "" set a1=%1&goto :EOF                              if %a2% EQU "" set a2=%1&goto :EOF