Asked By Stan Starinski
21-Nov-09 09:22 AM

This is a multi-part message in MIME format.
------=_NextPart_000_0021_01CA6A8C.162660A0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Printing Directory Listings
Liz Browning would probably have written something like that in her blog =
if she lived today. Imagine her writing poetry on her laptop and saving =
it in a folder named C:\Sonnets, when suddenly she gets an email from =
her publisher saying he needs the titles of all the poems she is written =
so far. So Liz opens Windows Explorer and selects the C:\Sonnets folder =
to display a list of sonnets in the right-hand pane (Figure 1). Then she =
wonders, How can I print a list of titles of these files?
Figure 1. How can Liz print a list of titles of her sonnets for her =
publisher?
Funny how often users need to do this, yet there is no simple way to =
accomplish the simple task through the Windows GUI. Of course, if you =
are familiar with the command line or can do some scripting, it is not =
difficult. So, out of curiosity I decided to "count" the ways this =
simple task could be done in Windows; here is what I came up with.=20
1. Using the Command Line
The simplest way is to use the good old dir command with the /b switch =
to suppress everything except the filenames. For example, to display the =
names of files in C:\Sonnets, you do the following:
C:\>dir c:\sonnets /bwhich produces:=20
But only three in all God's universe.doc
Go from me. Yet I feel that I shall stand.doc
I lift my heavy heart up solemnly.doc
I thought once how Theocritus had sung.doc
The face of all the world is changed, I think.doc
Thou hast thy calling to some palace-floor.doc
Unlike are we, unlike, O princely Heart!.doc
You can either redirect the output to a text file with:
dir c:\sonnets /b > titles.txtOr you can redirect it to your default =
printer with:
dir c:\sonnets /b > prnIf you do not want to open a command-prompt window =
first, you can simply go to Start -> Run and type:
cmd /c dir c:\sonnets /b > lpt1If the directory you want to list =
contains subdirectories, you can use tree instead of dir:
cmd /c tree c:\sonnets /f > lpt12. Adding a Context Menu Item
It would be nice to right-click on a folder in Windows Explorer and =
print a list of items in the folder, would not it? This is easy to do by =
first creating the following batch script using Notepad:
@echo off
dir %1 /-p /o:gn > "%temp%\Listing"
start /w notepad /p "%temp%\Listing"
del "%temp%\Listing"
exitSave this with some name like printdir.bat in your %windir% =
directory, and add "Print Directory Listing" to your context menu for =
Windows Explorer as follows. Open the Folder Options tool in Control =
Panel, select the File Types tab, and in the File Types column select =
the item labeled File Folder. Then click on the Advanced button, click =
on New, and specify a name for the action you want to perform and the =
batch file that performs it (Figure 2):
Figure 2. Associating the batch file printdir.bat with the action "Print =
Directory Listing"
Once you are done, you can right-click on a folder in Windows Explorer =
and print a list of the files it contains (Figure 3):
Figure 3. Printing a directory listing from Windows Explorer
This hack is cool, but it has a flaw when you implement it on XP: after =
you have implemented it, every time you try to open a folder using Windows =
Explorer, the Search Companion window opens instead of the folder you =
selected. The workaround is a quick Registry edit described in Knowledge =
Base article 321379, where this hack is found. Of course, you can =
further customize the hack by tweaking the syntax of the dir command or =
replacing it with tree, and so on.=20
3. Using Windows Script Host
Windows Script Host lets you leverage the power of scripting languages =
like VBScript and JScript to automate almost any task you need to =
perform. For example, here is a simple JScript that will list the names =
of all the files in the C:\Sonnets folder:
var fso, e, file;
fso =3D new ActiveXObject("Scripting.FileSystemObject");
e =3D new Enumerator(fso.GetFolder("c:\sonnets").files);
for (e.moveFirst(); ! e.atEnd(); e.moveNext()) {
file =3D e.item();