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
  • 8,096
  • 22
  • 77
  • 110

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
  • 87,344
  • 17
  • 243
  • 314
3

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
  • 20,957
  • 5
  • 26
  • 41
  • For jscript the enumerator is the key here... https://learn.microsoft.com/en-us/troubleshoot/developer/visualstudio/language-compilers/use-jscript-javascript-traverse-collection – canyonblue77 Aug 06 '23 at 05:39
0

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

JPC
  • 8,096
  • 22
  • 77
  • 110