2

This seems like it should be easy. I've never used JScript before and I'm looking at the JScript api provided by microsoft but no luck. Here's what I have:

    var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile("New Tracks.txt", true);
var objShell = new ActiveXObject("Shell.Application");
var lib;
lib = objShell.BrowseForFolder(0,"Select Library Folder",0);
items = lib.Items()
for (i=0;i<items.Count;i++)
{
    fitem = items[i];
    tf.WriteLine(fitem.Name);
}
WScript.Echo("Done");
tf.Close();

I get an error about fitem.Name that it's not an object or null or something. However, there are definitely files in that folder.

JPC
  • 7,861
  • 22
  • 75
  • 109

3 Answers3

3

The items variable in your script holds a FolderItems collection rather than an array. To access the collection's items, you need to use the Items(index) notation. So, replacing

fitem = items[i];

with

fitem = items.Item(i);

will make the script work.

Helen
  • 71,797
  • 10
  • 199
  • 256
2

This works for me, I had to change the path to the file or I get access denied (win 7).

  <script language="JScript">
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile("c:\\New Tracks.txt", true);

var objShell = new ActiveXObject("Shell.Application");
var lib;

lib = objShell.BrowseForFolder(0,"Select Library Folder",0);

var en = new Enumerator(lib.Items());

for (;!en.atEnd(); en.moveNext()) {
    tf.WriteLine(en.item());
}

WScript.Echo("Done");
tf.Close();
  </script>
James
  • 18,446
  • 2
  • 23
  • 39
0

Apparently you can't access it like an array and have to call the Item() method.

JPC
  • 7,861
  • 22
  • 75
  • 109